2016-08-08 2 views
1

.NET 씩 클라이언트 응용 프로그램에서 클라이언트 인증서를 성공적으로 식별 할 수 있으며 사용자가 성공적으로 클라이언트 인증서를 선택할 수 있습니다.X509Certificate2 요청 PIN

X509Store store = new X509Store("MY", StoreLocation.CurrentUser); 
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly); 
var fcollection = store.Certificates.Find(X509FindType.FindByApplicationPolicy, "1.3.6.1.5.5.7.3.2", true); 
// other stuff where user selects one of them 

이제 사용자에게 챌린지에 답변하도록 요청하려면 어떻게해야합니까 (예 : PIN)?

I see SignedXML.ComputeSignature() 클래스가 있지만 바이트 스트림이 필요하며 어디에서 왔는지는 확실하지 않습니다 (아마도 certificate.RawData []?).

저는 실제 핀을 얻는 것에 관심이 없지만 카드/핀 일치라고 생각합니다.

편집 : 나는 개인 스마트 카드에서 키 (심지어 그것에서 암호화)를 사용했지만, 내 PIN 요구되지 않는

.

RSACryptoServiceProvider rsacsp = (RSACryptoServiceProvider)certificate.PrivateKey; 
UnicodeEncoding ByteConverter = new UnicodeEncoding(); 
byte[] dataToEncrypt = ByteConverter.GetBytes("Data to Encrypt"); 
var encryptedData = RSAEncrypt(dataToEncrypt, rsacsp.ExportParameters(false), false); 

답변

0

스마트 카드 인 경우 인증서의 개인 키를 사용하려고하면 핀 프롬프트가 표시됩니다.

인증서를 어떻게 든 사용하고 결과를 확인해야합니다. 예를 들어 인증서를 사용하여 서명 할 수 있습니다. 서명 작업이 완료되면 핀 프롬프트가 나타납니다.

인증서를 "사용"할 필요가 없다면 인증서가 실제로 있는지 확인하고 사용자가 핀을 알고 있는지 확인하려면 일종의 증명 자료가 필요합니다. 인증서는 챌린지에 서명하는 데 사용될 수 있으며 원격 서버는 서명의 유효성을 검사 할 수 있으므로 신뢰할 수있는 루트에 속한 키를 사용합니다. 당신이 재생 공격 등에 노출되어 있지 않은지 확인하는 것과 같이 올바르게하기가 어렵다는 것을 명심하십시오.

+0

작동하지 않는 것 같습니다. 위의 코드는 개인 키가 임의의 텍스트를 암호화하는 데 사용되는 편집에 추가되었지만 PIN을 묻지는 않습니다. – micahhoover

+0

비밀 키/인증서가 핀으로 보호되어있는 것처럼 들리지는 않습니다. 실제로 암호화되었거나 서명 한 경우입니다. – vcsjones

+0

아마도 ... MVC에서 SslFlags = "SslNegotationCertificate"일 때 내 PIN을 요청하고 올바른 PIN이 아닌 한 작동하지 않습니다. 따라서 두꺼운 클라이언트 응용 프로그램에서도이 기능을 사용할 수 있어야합니다. – micahhoover