2012-05-17 3 views
1

을 사용하여 인증서 저장소에 저장되어 있고 내보낼 수없는 것으로 표시된 X509Certificate2의 PrivateKey를 사용하십시오. bouncycastle을 사용하여 소규모 인증 기관을 구축하려고합니다.BouncyCastle 및 C#

인증서는 BouncyCastle을 사용하여 생성되며 개인 키와 함께 현재 사용자의 인증서 저장소에 저장됩니다.

그러나 보안상의 이유로 키는 내보낼 수없는 것으로 표시됩니다. 나는 이것을 회피하는 것이 쉽지만, 그것은 추가적인 장벽이되는 것을 의미합니다.

이제 새로운 인증서에 서명해야한다면 인증서의 개인 키에 액세스해야합니다. 나는이 코드를 사용하여 시도 :

X509Certificate2 caCert = GetRootKey(); // Fetches the certificate from the store 
AsymmetricCipherKeyPair caPrivKey = DotNetUtilities.GetKeyPair(caCert.PrivateKey); 

불행하게도 내가 CryptographicException를 얻을 - 개인 키를 내보낼 수 없습니다로 표시되어 있기 때문에, 그리고 이것이 내가 ;-)

내 질문을 의도 한 것은입니다 : 어떻게 사용할 수 있습니다 인증서에 액세스하지 않고 개인 키를? 나는 비밀 키를 액세스 할 수있는 방법없이 저장하는 것이 의미가 없으므로 몇 가지 중요한 사항을 놓치고 있다는 것을 확신합니다 ...

나는 이것을 몇 시간 동안 찾고 있지만 돈은 없습니다. stackoverflow 또는 Google에서 아무것도 찾지 못했습니다.

누구나 내가 근본적으로 잘못한 것을 말할 수 있습니까? 뭔가를 사인하는 또 다른 접근법이 있습니까?!

미리 감사드립니다.

크리스

답변

0

짧은 답변 : 아니 BouncyCastle와.

키를 BouncyCastle (또는 OpenSSL 또는 기타) 라이브러리에 넣고 거기에서 사용할 수 없습니다. "no export"플래그를 우회하여 내보내기하지 않고도이를 수행 할 수있는 방법은 없습니다. 관리자가 Fu를 필요로 할 때 가능하다는 것을 지적하십시오.

키에 대한 CryptoAPI 핸들을 얻고 CryptoAPI에게 서명 또는 암호화 작업을 요청하십시오. DotNet 암호화 클래스는 CyptoAPI를 캡슐화합니다.

기본적으로 DotNet 암호화 클래스를 사용하는 방법에 대한 자습서가 필요합니다. 예를 들어, 많은있다이 MSDN 매거진의 기사는 내리막 길의 사분의 삼에 대한 디지털 서명의 예를 가지고 :

http://msdn.microsoft.com/en-us/magazine/cc163454.aspx

+0

안녕 벤, 암호화-API에 링크와 지점에 대한 감사합니다! 나는 그 기능을 구현하려고 할 것이다. 아마도 BouncyCastle은 올바른 선택이 아닙니다. 클라이언트 인증을 위해 내부 CA가있는 Client/Server-Application을 만들고 싶었고 BC와 함께 쉽게 생각할 수있었습니다. – Chris

관련 문제