我正在尝试使用 OpenSSL 生成的证书在 C# 中的 TLS 加密上创建 TCP 连接。
此处给出的 SslStream 示例代码似乎可以使用使用 windows makecert.exe 创建的证书工作,该证书以 .cer 文件的形式出现。它不适用于通过 OpenSSL 创建的证书,这是一个 .pem 文件,抛出异常:“服务器模式 SSL 必须使用具有关联私钥的证书。”
两个证书文件都被成功解析为 X509Certificate 对象,因为我可以看到它们的颁发者和主题以及其他属性,并注意“HasPrivateKey”属性为假“PrivateKey”属性在它们两者上都为空。
我发现这表明您需要将(OpenSSL)证书和私钥组合到一个 PKCS12 包中。然而,PKCS12 包的文件格式是 .pfx——为什么 OpenSSL 证书必须与私钥组合成 pfx,但 makecert 生成的 .cer 文件不需要是 pfx(而且不是 PKCS12) ?
此外,当 MakeCert 证书也没有私钥时,OpenSSL 证书首先有什么不同,导致它抛出关于丢失私钥的异常?或者换句话说,为什么 MakeCert 证书似乎不需要像 OpenSSL 证书那样的私钥?