TLS 握手在使用仅公开公钥的证书时失败,但在使用另一个公开私钥的证书时有效。当我们使用仅公开公钥的证书时,它会给出“400 Bad Request No required SSL certificate was sent”
这里的一个关键区别是,使用公开私有的第二个证书,我们授予网络服务权限,但由于第一个证书不公开私钥,我们无法授予网络服务权限。这两个证书都已正确安装在商店中。
以下是示例代码:
public string TestCall() {
try {
string url = "Some URL";
string apiKey = "Key Information";
string secret = "Key Secret";
string payload = "Timestamp";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.SendChunked = false;
request.AllowAutoRedirect = true;
request.Date = DateTime.UtcNow;
var keyStore = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
keyStore.Open(OpenFlags.ReadOnly);
X509Certificate clientCertificate = keyStore.Certificates.Find(X509FindType.FindByThumbprint, ConfigurationManager.AppSettings["ThumbPrint"], true)[0];
request.ClientCertificates.Add(clientCertificate);
var authProvider = new HmacAuthProvider();
var headers = authProvider.GenerateAuthHeaders(apiKey, secret, payload, url);
foreach (var header in headers)
{
request.Headers.Add(header.Key, header.Value);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
return responseString;
}
catch (Exception ex)
{
return ex.Message + " " + ex.StackTrace.ToString();
}
}
知道这里缺少什么,没有私钥的证书没有到达服务器。
基于证书的身份验证需要拥有相应证书的私钥。您不能仅使用公共证书(没有私钥)进行客户端身份验证,您需要私钥,因为它用于签署 TLS 握手数据。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句