好的,我正在使用 mac 生成我的自签名密钥。这是我使用的工作方法。
我创建了一个 shell 脚本来加快我的密钥生成速度。
genkey.sh
#/bin/sh
ssh-keygen -f host.key
openssl req -new -key host.key -out request.csr
openssl x509 -req -days 99999 -in request.csr -signkey host.key -out server.crt
openssl pkcs12 -export -inkey host.key -in server.crt -out private_public.p12 -name "SslCert"
openssl base64 -in private_public.p12 -out Base64.key
在脚本中添加 +x 执行标志
chmod +x genkey.sh
然后调用 genkey.sh
./genkey.sh
我输入密码(重要的是至少在最后包含导出密码)
Enter pass phrase for host.key:
Enter Export Password: {Important to enter a password here}
Verifying - Enter Export Password: { Same password here }
然后我将 Base64.Key 中的所有内容放入一个名为 sslKey 的字符串中
private string sslKey = "MIIJiAIBA...................................." +
"......................ETC...................." +
"......................ETC...................." +
"......................ETC...................." +
".............ugICCAA=";
然后我使用延迟加载属性获取器通过私钥获取我的 X509 证书。
X509Certificate2 _serverCertificate = null;
X509Certificate2 serverCertificate{
get
{
if (_serverCertificate == null){
string pass = "Your Export Password Here";
_serverCertificate = new X509Certificate(Convert.FromBase64String(sslKey), pass, X509KeyStorageFlags.Exportable);
}
return _serverCertificate;
}
}
我想走这条路,因为我在 mac 上使用 .net 2.0 和 Mono,并且我想使用没有编译库或依赖项的 vanilla Framework 代码。
我的最终用途是使用 SslStream 来保护与我的应用程序的 TCP 通信
SslStream sslStream = new SslStream(serverCertificate, false, SslProtocols.Tls, true);
我希望这对其他人有所帮助。
注意
没有密码我无法正确解锁导出私钥。