0

我正在用 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() 的实现吗?

4

2 回答 2

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;
}
于 2016-10-22T19:19:23.233 回答
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"));
于 2015-10-07T17:00:48.303 回答