如何在C#中检索证书信息以进行客户端身份验证

时间:2015-10-07 16:33:04

标签: c# ssl windows-10 tls1.2

我正在用c#开发一个客户端应用程序,并在本地创建了一个证书。现在我需要在streamsocketcontrol对象中传递证书。 例如:

socket = new StreamSocket();
Windows.Security.Cryptography.Certificates.Certificate certificate = await GetClientCert();
StreamSocketControl scontrol = socket.Control;
scontrol.ClientCertificate = certificate;

然后我打电话:

ConnectAsync(hostname, port, tls1.2);

我需要了解C#中GetClientCert()的实现?

2 个答案:

答案 0 :(得分:0)

如果您需要从计算机上的某个证书存储区获取证书,您可以执行以下操作:

var clientCertificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
clientCertificateStore.Open(OpenFlags.ReadOnly);

var clientCert = clientCertificateStore.Certificates.Cast<X509Certificate2>().FirstOrDefault(c => c.Issuer.Contains("MyIssuerName"));

答案 1 :(得分:0)

试试这个。此选项与UWP兼容

public async Task<Certificate> GetClientCert()
{ 
    try {
        Windows.Storage.StorageFile sampleFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Certificate/clients.pfx"));
        IBuffer certBuffer = await Windows.Storage.FileIO.ReadBufferAsync(sampleFile);
        String encodedCertificate = CryptographicBuffer.EncodeToBase64String(certBuffer);
        Certificate crt = new Certificate(certBuffer);
        return crt;
    }catch(Exception e)
    {
        Debug.WriteLine(e.ToString());
    }
    return null;
}