gpt4 book ai didi

c# 如何从证书和 key 或 pfx 或 p7b 创建 X509 证书

转载 作者:行者123 更新时间:2023-12-05 08:03:36 25 4
gpt4 key购买 nike

我主要使用 SslStream docs 中的示例创建了一个 C# SSL TCP 网络服务器,我已经创建并下载了一个 SSL 证书(使用 sslforfree )并使用 openssl through powershell 创建了 pkcs#7/p7b 和 pkcs#12(使用空白密码)证书.我还没有找到使用 pkcs# 12 或 7 的方法。

(使用 OpenSSL.X509Certificate2ProviderSystem.Security.Cryptography.X509Certificates)

最成功的是使用这段代码:

string certfiletext = File.ReadAllText(Path.Combine(workingpath, "certificate.crt"));
string privatekeytext = File.ReadAllText(Path.Combine(workingpath, "private.key"));
ICertificateProvider provider = new
CertificateFromFileProvider(certfiletext, privatekeytext);
serverCertificate = provider.Certificate;

此代码通过了 sslStream.AuthenticateAsServer 要求,但在 bytes = sslStream.Read(buffer, 0, buffer.Length);

处失败

与此失败相关的堆栈跟踪表示解密操作失败,请参阅内部异常,内部异常为:Win32Exception:处理证书时发生未知错误。

这让我相信证书创建不正确。我得到的另一种方法是:

serverCertificate = 
new X509Certificate2(Path.Combine(workingpath, "certificate.pfx"), "");

但这会导致与先前代码相同的问题。(由于处理证书错误导致的解密错误)。无论证书是否已安装在我的机器上,都会出现此错误。服务器找到正确的文件也没有问题。

这是我用于嵌入在 html 中的 JS 客户端的代码:

wsUri = "wss://thisismyip:11000",
websocket = new WebSocket(wsUri);

websocket.onopen = function (e) {
websocket.send(window.location.hostname + window.location.pathname.substring(1));
};

websocket.onclose = function (e) {};

websocket.onmessage = function (e) {
//server response, do stuff when it responds
};

websocket.onerror = function (e) {};

虽然我怀疑这个问题与 JS 代码有关,但我可能遗漏了一些重要的东西。

总结:由于服务器端证书问题,我无法在 javascript websocket 和 C# TCP 服务器之间创建 SSL 连接。

最佳答案

我已经为这个证书问题创建了这样的代码。也许它会对你有所帮助:

        private const string _password = "123";
private const string _certificatePath = certificate.pfx";

public static HttpClient Build()
{
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.SslProtocols = SslProtocols.Tls12;
clientHandler.ClientCertificateOptions =
ClientCertificateOption.Manual;

// to hide any ssl errors
clientHandler.ServerCertificateCustomValidationCallback = (sender,
cert, chain, sslPolicyErrors) => { return true; };

var cert = new X509Certificate2(_certificatePath, _password);

clientHandler.ClientCertificates.Add(cert);

return new HttpClient(clientHandler);
}

关于c# 如何从证书和 key 或 pfx 或 p7b 创建 X509 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72067956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com