gpt4 book ai didi

c# - Azure VM 上的双向 SSL 证书交换

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:45 25 4
gpt4 key购买 nike

我们有一个 Web 应用程序,它必须使用双向 SSL 证书身份验证与 HTTP 服务通信。以下是相关代码

        X509Certificate certificate = GetCertFromStore(StoreName.My, StoreLocation.LocalMachine, certName);
if (certificate != null)
{
Log.Debug($"Adding client cert {certificate.Subject}");

WebRequestHandler handler = new WebRequestHandler();

handler.ClientCertificates.Add(certificate);
handler.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.UseProxy = false;

using (var client = new HttpClient(handler))
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var postObj = new
{
// somestuff
};
var postBody = JsonConvert.SerializeObject(postObj);

var httpContent = new StringContent(postBody, Encoding.UTF8, "application/json");

HttpResponseMessage httpResponse = client.PostAsync(queryUrl, httpContent).Result;
if (httpResponse.IsSuccessStatusCode)
{
// codey code
}
else
{
Log.Error($"some error stuff.");
}
}
}
else
{
Log.Error($"Unable to find the certificate with name: {certName}");
}

目前我们使用的是我们提供给第三方服务提供商的自签名证书,并从他们那里安装了相关的服务器证书。

在本地开发机器上一切正常 - 连接已建立,服务调用和响应正确进行。

但是,当我们在 Azure VM(我们的测试环境)上部署时,证书交换失败。查看 Wireshark 跟踪,我们可以看到服务器证书已被接受,但它显示发送了 0 个客户端证书。我们知道在商店中找到了客户端证书(由于日志记录),我们可以从 Wireshark 跟踪中看到客户端证书名称确实列在服务器证书请求的“可分辨名称”中。

无法弄清楚如何,即使代码将我们预期的客户端证书添加到 WebRequestHandler,它也会在握手期间消失。

最佳答案

我们解决了这个问题。

首先我认为证书是在没有私钥的情况下安装的。在我们的函数 GetCertFromStore 中,它找到了证书,但我认为因为它没有私钥,所以没有发送它。 (它找到证书的事实让我们感到困惑——我们假设如果它找到了证书,那么一切都很好。)

为解决此问题,我们将其从商店中删除,然后使用 .pfx 文件重新安装,确保同时导入私钥。

还有一个权限问题,我们在 StackOverflow 上找到了答案 here (注意,不是标记为“答案”的答案,而是关于权限的答案)。对于能够加载和使用带有私钥的证书的 Web 应用程序,应用程序池身份(或模拟用户)必须对已安装证书的 key 文件(通常位于 C:\ProgramData\Microsoft\Crypto\RSA 中)具有读取权限\机器键)。

关于c# - Azure VM 上的双向 SSL 证书交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58638081/

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