2012-05-29 5 views
2

CertCreateSelfSignCertificate 기능을 사용하여 자체 서명 인증서를 생성했습니다. 이렇게하면 PCCERT_CONTEXT가 생성됩니다.CryptoApi : 개인 키없이 인증서를 내 보냅니 까?

공개 키만 사용하여 PCCERT_CONTEXT 변수에 저장된 인증서를 내보내려면 어떻게해야합니까? 이 작업을 네트워크의 다른 당사자에게 보내려고하므로 공개 키를 사용하여 메시지를 암호화 할 수 있습니다.

나는 이것이 곧은 앞으로의 옵션이라고 생각하지만, 그것은 아니다.

답변

1

먼저 인증서를 인증서 저장소에 put 인증서로 가져온 다음 PFXExportCertStoreEx을 사용하여 dwFlags가 0 (즉, EXPORT_PRIVATE_KEYS을 (를) 설정하지 않음)으로 전달해야합니다.

P. CryptAPI, JSSE, OpenSSL 등의 암호 라이브러리를 다룰 때 어떤 것도 똑바로 앞으로 나아갈 수 없습니다. 항상 악몽입니다.

+0

감사합니다. 이 함수는 아마도 내가 원하는대로 할 것이다. 그럼에도 불구하고 pfx로 전체 저장소를 내보내는 것은 해당 공개 키가있는 단일 인증서 만 내보내고 싶을 때 깨끗하게 보이지 않습니다. 가야 할 또 다른 방법이 있어야합니다. – Erik

+0

글쎄, 어쨌든이 인증서를 반드시 일부 상점에 저장한다는 아이디어가 있습니다. 그렇지 않으면 개인 키가 풀릴 것입니다. 따라서 저장소에 저장되면 인증서를 내보낼 수 있습니다. 전체 상점을 pfx로 내보낼 필요는 없습니다. –

2

pfx가 필요 없습니다.

인증서가 구조 CERT_CONTEXT 안에 존재한다 : 단지 부재 가리키는 버퍼의 콘텐츠를 저장할 수는 길이가 cbCertEncoded 부재의 값을 pbCertEncoded하고. pCertInfo-> SubjectPublicKeyInfo로 :

더욱이,이 인증서의 공개 키는 CERT_CONTEXT 구조에 직접적으로 존재한다. 예를 들어 CryptImportPublicKeyInfo을 사용하여 가져오고 CryptEncrypt을 호출하여 데이터를 암호화 할 수 있습니다.

두 가지 옵션을 사용하면 메시지 암호화를 시작하는 데 필요한 모든 기능을 사용할 수 있습니다. 물론 개인 키는 암호화 된 데이터를 해독 할 수 있도록 안전하게 보관해야합니다.

+0

또한 CryptSignAndEncryptMessage를 사용하고 공개 키 정보를받는 사람 인수로 전달할 수 있습니까? 어떻게 든 공개 키 정보를 CERT_CONTEXT로 변환해야한다고 생각합니까? – Erik

+0

@Erik : Mounir이 맞습니다. * 비공개 * 키는 별도로 저장됩니다. '.cbCertEncoded'에서 시작하는'cbCertEncoded' 바이트를 확장자 .cer을 가진 파일에 저장하면 다른 파일은 인증서를 사용할 수 있지만 키 컨테이너에 저장된 개인 키는 액세스 할 수 없습니다 . – Oleg