希望有人可以帮助我掌握BouncyCastle / C#.....
方案是我有一个https服务器(Node.js),使用的是我生成的CA证书并自行签名。 客户端使用通过我的CA证书生成的证书连接到该证书(并因此通过我的服务器进行了验证-它们只能通过 I 颁发的证书来连接)。
我已经整理出使用openssl生成客户端证书的步骤。
# Generate private key for the client
openssl genrsa -out $CLIENT-key.pem 4096
# Generate a signing request
openssl req -new -sha256 -key $CLIENT-key.pem -out $CLIENT-csr.pem -subj $SUBJ -passout pass:$CLIENT
# Perform the signing
openssl x509 -req -days 730 -in $CLIENT-csr.pem -CA $CA_CERT -CAkey $CA_KEY -passin pass:$CA_PASS -CAcreateserial -out $CLIENT-crt.pem
请注意,CA证书/密钥文件[CA_CERT / CA_KEY]上有一个密码[CA_PASS]。并在生成的客户端证书上。
然后我将其转换为密码保护的PFX并将其发送给他们(但是该步骤现在可以等待...)
# Create PFX (PKCS#12) file for client
openssl pkcs12 -export -out $CLIENT.pfx -inkey $CLIENT-key.pem -in $CLIENT-crt.pem -passout pass:$CLIENT
此脚本可以正常工作-客户端/服务器身份验证可以正常工作-但现在我正尝试使用BouncyCastle(而不是openssl脚本)在.NET中创建客户端证书。
我找到了一些漂亮的代码来创建密钥对和CSR:https://www.codeproject.com/Tips/1223885/Generate-PKI-using-Bouncy-Castle-An-Example
这看起来很理智-提供了PEM编码的私钥和CSR。即希望脚本的前两个步骤。
我无法掌握的是第三步-实际签名(使用我的CA Cert +密钥+密码)。
(我敢说,有一种方法可以避免往返于PEM编码的文本之间,根据上面的Post,但是任何有关签名阶段机制的指针都应该有帮助)。
抱歉,如果有上述不恰当的术语-我在PKI方面的经验有限....
谢谢
编辑
我已经通过将C#与openssl命令混合使用来验证,我的应用程序可以生成客户端的私钥和。如果我使用这些,然后使用openssl进行其余操作,则pfx可以正常工作。
我还认为我可能可以生成pfx文件。这是我正在努力的第3步-我不知道如何执行“ openssl x509”步骤。 Windows可以读取我最终获得的证书,但似乎没有包含我的CA-证书路径/链只是客户端证书本身。