CA 서명 공개 키는 어떻게 생성합니까?

다른 사람이 내 공개 키로 비밀 데이터를 암호화 한 다음 내 비공개 키로 해독 할 수 있도록해야합니다. 저는 OpenSSL을 사용하여 RSA 개인 / 공개 키 쌍을 생성하여 공개 키를 제공하고 모든 것이 작동하도록했습니다.

더 최근에 누군가 우리가 중간자 공격의 대상이 될 수 있다고 지적했습니다. 악당들이 내 공개 키를 받아들이고 자신의 공개 키를 다른쪽에 전달합니다. 다른 쪽은 비밀 데이터를 성실하게 암호화하고이를 해독 할 MITM에 전달하고, 내 공개 키로 다시 암호화 한 다음 내가 현명하지 않게 나에게 전달합니다. 권장되는 해결책은 다른 쪽이 신뢰하는 CA에서 내 공개 키에 서명하도록하는 것입니다.

실험으로 내 CA로 서명 할 수있는 CSR을 생성했지만 결과 인증서에는 (암호화 된) 개인 키도 포함됩니다. 암호화 여부에 관계없이 내 비밀 키를 다른 사람에게 전달하지 않을 것입니다.

내 공개 키에 서명 할 수있는 방법이 있습니까?

댓글

  • 인증서에 개인 키가 포함되어 있습니까? 어? 어떻게 이럴 수 있었습니까? pastebin.com에 해당 파일을 게시 할 수 있습니까? (두 번째 키 쌍으로 다시 실행하면 ' 원본을 공유 할 필요가 없습니다.)
  • 이해하기 시작한 것 같습니다. CSR을 생성하려면 개인 키가 필요하지만 CSR과 결과 인증서에는 개인 키가 포함되어 있지 않습니다. 인증서는 실제로 내가 원하는대로 서명 된 공개 키입니다.

답변

공개 키 서명 사실상 인증서입니다. 다음은 나와 안전하게 통신 할 수 있도록 다른 사람에게 배포 할 수있는 공개 키 인증서를 생성하는 단계입니다.

설정

  1. 개인 키 생성 :

    openssl genrsa -out private.pem 2048

  2. 공개 키를 생성합니다.

    openssl rsa -in private.pem -outform PEM -pubout -out public.pem

  3. CSR (인증서 서명 요청) 생성

    openssl req -new -key private.pem -out certificate.csr

  4. 자체 서명 된 인증서 만들기 (이 인증서를 공유 할 수 있음)

    openssl x509 -req -days 365 -in certificate.csr -signkey private.pem -out certificate.crt

암호화

openssl rsautl -encrypt -inkey private.pem -keyform PEM -in 데이터> encrypted_data

복호화

  1. 인증서에서 공개 키 추출

    openssl x509 -pubkey -noout -in certificate.crt> certpubkey.pem

  2. 데이터 해독

    openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data> 데이터

CA에서 키에 서명하려면 “CSR 파일 (및 현금)을 선택한 CA로 보내야합니다.”자체 서명 된 인증서 대신 사용할 수있는 인증서를 제공합니다. 위 단계에서 언급했습니다.

댓글

  • 이것은 제가 요청한 것과 반대이지만 논의 목적으로 할 것입니다. 상대방이 암호를 해독하려면 MITM 공격의 대상이되는 내가 추출한 공개 키가 필요하거나 (암호화 된) 개인 키를 포함하는 전체 인증서가 필요합니다.
  • @ user1683793 다른 쪽 끝에는 두 개의 인증서가 필요합니다. 첫 번째는 이미 있어야합니다 (자체 서명 된 CA 인증서). 두 번째는 확인하려는 공개 키를 포함하며 CA 인증서로 서명됩니다 (연관된 CA 개인 키 사용). 두 번째 인증서의 유효성은 CA 인증서의 공개 키를 사용하여 테스트됩니다. 비공개 키는 항상 비공개로 유지됩니다.
  • " -encrypt " 및 -decrypt " 대신 " -sign " 및 "-확인 ". (세부 정보 : czeskis.com/random/openssl-encrypt-file.html )
  • 작동하지 않음 : 2. 데이터 해독 이 작동하지 않았습니다. openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > data이 오류 / 메시지가 표시됩니다. A private key is needed for this operation
  • 섹션 Setup, 2 단계는 public.pem를 제공합니다. ' 더 이상 사용되지 않습니다. 단계. CSR이 개인 키로 생성 될 때 해당 공개 키의 용도는 무엇입니까?

답변

프로세스에는 다음 세 가지 항목이 포함되어야합니다.

  1. 발신자-귀하
  2. 수신자-사용자
  3. 인증 기관-신뢰할 수있는 제 3 자 (또는 경우에 따라 귀하)

프로세스 사물을 안전하게 유지하는 것은 “The Sender”이며 한 쌍의 키 (공개 및 개인)를 생성합니다. 나는 이것을 더 나은 시각을 위해 열쇠와 자물쇠라고 부르는 것을 좋아합니다. 키 (개인)는 보낸 사람의 소유를 떠나서는 안됩니다. 이것이 바로 개인 키라고하는 이유입니다.

그런 다음 보낸 사람은 공개 키 (잠금)를 사용하여 인증서 서명 요청 (CSR)을 생성합니다. ) 인증 기관 (신뢰할 수있는 타사)으로 전달되는 경우 인증 기관은 인증 기관 개인 키를 사용하여 공개 키 (잠금)에 서명합니다.

인증 기관은 이제 “발신자”공개 키를 보냅니다. 인증 기관 개인 키에 의해 “발신자”에게 다시 서명되며, 이제는 인증서입니다.

수신자는 인증서를 가져와 (웹 브라우저를 통해 말할 수 있음) 유효한지 확인합니다. “발신자”와 “수신자”모두 신뢰할 수있는 제 3 자이기 때문에 인증 기관 공개 키입니다. 인증이 완료되면 인증서의 공개 키를 “발신자”의 공개 키로 신뢰할 수 있습니다 *.

“수신자”가 “발신자”에게 데이터를 보내야하는 경우에는 신뢰할 수있는 인증서의 공개 키를 사용하여 데이터를 cypertext로 암호화 한 다음 “The Sender”로 전달합니다. “The Sender”의 개인 키만 “The Sender”의 공개 키로 암호화 된 암호 텍스트를 해독 할 수 있으므로 누구나 중간에 본질적으로 쓸모없는 깨진 텍스트가 있습니다.

특정 경우 “발신자”는 다른 키 세트로 자체 CSR에 서명하거나 동일한 세트로 자체 서명하여 자신의 인증 기관을 생성 할 수 있습니다. 이 경우 “발신자”의 공개 키는 보안 채널을 통해 양 당사자가 모두 알고 있어야 신뢰를받을 수 있습니다. 소프트웨어에서는 신뢰할 수있는 타사로 사용할 수있는 결과물에 인증서를 포함 할 수 있습니다.

* trusted는 인증 기관이 CRL (인증서 해지 목록)을 유지하고 모든 당사자가 목록을 모니터링하는 경우에만 유효합니다. 발급 된 인증서가 손상되지 않았는지 확인합니다. 인증 기관이 손상되고 개인 키가 유출 된 경우가 존재하며,이 경우 손상 에이전트는 개인 키를 사용하여 “The Sender”를 모방 한 신뢰할 수있는 인증서를 생성 할 수 있습니다. ,이 경우 MITM이 가능하고 MITM은 “The Sender”로부터 데이터를 수신하여 “The Sender”와 같은 유효한 인증서로 해독, 저장, 암호화 한 다음 “The Receiver”에 전달할 수 있습니다.

답변

생성 한 CA 인증서의 복사본에서 암호화 된 개인 키를 가져옵니다 (다른 사람에게 제공 할 때). 개인 키는 anoth가 포함 된 인증서에 서명하는 데 사용하지 않는 한 거기에있을 필요가 없습니다. er 공개 키.

공개 키를 통해 전송하는 경우 대신 관련 CA 개인 키를 사용하여 서명 된 전체 인증서 (개인 키 제외)를 전송하십시오. 내부 공개 키의 유효성을 확인하려면 인증서의 해시를 암호화 된 해시 (CA의 개인 키를 사용하여 암호화)와 비교해야합니다. 이는 CA의 공개 키를 사용하여 해독됩니다. . 복호화가 성공하고 해시가 인증서의 해시와 일치하면 인증서 내부의 정보를 신뢰할 수 있습니다.

또한 암호화 외에 더 많은 것이 있습니다. 공격자는 이전에 저장된 암호화 된 데이터를 보냅니다. TLS는 일반인이 생각하는 것보다 훨씬 많은 것을 다루며 유사한 시스템을 구현하는 것은 절대 권장되지 않습니다. 비공개로 의도 된 모든 것에 가능하면 TLS를 사용하십시오.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다