如何从单独的文件中获取私钥
本文关键字:获取 私钥 文件 单独 | 更新日期: 2023-09-27 18:25:21
我有一个Apache(examplep/wamp)服务器,它在端口443上提供SSL连接。它使用两个证书文件:server.cert和server.key,后者包含私钥。
我有另一个服务器,配置为侦听端口843上的请求(闪存策略),并用C#编写的一些文本回复来响应某个请求,该文本回复单独运行。
为了实现SSL连接,我使用了一个名为SecureSocket的flex对象,它允许使用原始服务器证书来加密请求。
我的目标是教我的843 C#服务器解密发送的数据并加密回复,为此,我在C#中使用X509Certificate对象。
然而,由于pub和priva密钥在不同的文件上,我在以下方面得到了FALSE:
string text = System.IO.File.ReadAllText(@"C:'xampp'apache'conf'ssl.crt'server.crt");
UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] byteCert = encoding.GetBytes(text);
X509Certificate2 uberCert = new X509Certificate2();
uberCert.Import(byteCert);
Console.WriteLine("Has privateKey:" + uberCert.HasPrivateKey.ToString());
Console.WriteLine("PrivateKey: 'n" + uberCert.PrivateKey);
显然,uberCert上的错误。HasPrivateKey来自于私钥在另一个文件上的事实,所以我的问题是:
1.如何使用X509CErtificate2对象读取私钥?2.我如何使用公钥来解密接收到的消息,以及如何使用私钥对其进行重新加密(以便将加密的响应发送回)?
提前感谢
迈克。
我创建了一个小助手NuGet包(基于openssley),以在公钥和私钥(rsa)上创建基于X509证书的。
// Generate with: openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate_pub.crt
string certificateText = File.ReadAllText("certificate_pub.crt");
string privateKeyText = File.ReadAllText("private.key");
ICertificateProvider provider = new CertificateFromFileProvider(certificateText, privateKeyText);
X509Certificate2 certificate = provider.Certificate;
// Example: use the PrivateKey from the certificate above for signing a JWT token using Jose.Jwt:
string token = Jose.JWT.Encode(payload, certificate.PrivateKey, JwsAlgorithm.RS256);
有关功能和代码示例,请参阅NuGet和Github项目。
私钥可能是PEM编码的PKCS#8结构。
Mono项目提供了在Mono中读取这种格式(以及其他格式)的代码。Security.dll程序集。此程序集是纯托管的,将在Windows、Linux或OSX上运行。
你不能直入。NET。
您可以使用BouncyCastle(请参阅以下答案:如何从.NET读取PEM RSA私钥),也可以使用PKCS12容器作为用户名+密码,您可以使用OpenSSL的工具从PEM文件中创建该容器。