【发布时间】:2019-09-10 21:30:21
【问题描述】:
我需要开始使用 SNMPv3 而不是 DTLS 和 c# 中的 windows 证书存储区中的证书,从我目前所见,这根本不经常使用。不幸的是,我在这件事上别无选择。
我正在使用DTLS.NET 进行握手。一个技巧是DTLS.NET 似乎想要一个pem 文件而不是来自Windows 证书存储的X509 Certificate。我相信我已经想出了如何加载证书,除了私钥。私钥不可导出,我不相信我可以改变它。
public void LoadX509Certificate(X509Certificate2 certificate)
{
if (certificate == null)
{
throw new ArgumentNullException(nameof(certificate));
}
this._PrivateKey = DotNetUtilities.GetKeyPair(certificate.PrivateKey).Private;
this._Certificate = new Certificate
{
CertChain = new List<byte[]>() { certificate.RawData },
CertificateType = TCertificateType.X509
};
}
我相信我已经弄清楚了证书验证消息,而这似乎是需要私钥的地方。
CertificateVerify certificateVerify = new CertificateVerify();
byte[] signatureHash = _HandshakeInfo.GetHash();
certificateVerify.SignatureHashAlgorithm = new SignatureHashAlgorithm() { Signature = TSignatureAlgorithm.ECDSA, Hash = THashAlgorithm.SHA256 };
certificateVerify.Signature = TLSUtils.Sign(_PrivateKey, true, _Version, _HandshakeInfo, certificateVerify.SignatureHashAlgorithm, signatureHash);
SendHandshakeMessage(certificateVerify, false);
我似乎在 RFC 或其他地方找不到太多准确描述此处需要发生的事情的信息。我知道服务器可以处理RSA、DSS 或ECDSA,所以我把它留给ECDSA,因为这是DTLS.NET 使用的。
我真的需要私钥来创建CertificateVerify 消息吗?
提前致谢!
【问题讨论】:
标签: c# x509certificate private-key dtls