![](/img/trans.png)
[英]HTTPS .Net Core 3.1 results in "The SSL connection could not be established, see inner exception."
[英]"The SSL connection could not be established, see inner exception." For POST Request(.net 6)
首先,问题的标题可能看起来像重复。 但是我在 SO 尝试了所有可能的解决方案,但没有任何效果。 最有趣的是,相同的代码适用于 .net framework-4.x。
证书和密钥有效,因为具有相同.crt 和.key 的相同代码正在工作。
var certPath = _fileProvider.Combine(_fileProvider.MapPath("~/Plugins/Payments.CityBankApi/"), "othoba.crt");
var keyPath = _fileProvider.Combine(_fileProvider.MapPath("~/Plugins/Payments.CityBankApi/"), "othoba.key");
string certificateText = File.ReadAllText(certPath);
string privateKeyText = File.ReadAllText(keyPath);
ICertificateProvider provider = new CertificateFromFileProvider(certificateText, privateKeyText, true);
var certificate = provider.Certificate;
string accessTokenUrl = string.Empty;
accessTokenUrl = "https://sandbox.thecitybank.com:7788/transaction/token";
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);
handler.ServerCertificateCustomValidationCallback +=(sender, certificate, chain, errors) => {
return true;
};
string json = JsonConvert.SerializeObject(new
{
userName = _cityBankPaymentSettings.UserName,
password = _cityBankPaymentSettings.Password
});
var httpContent = new StringContent(json, Encoding.UTF8, "application/json");
var client = new HttpClient(handler);
var result = client.PostAsync(accessTokenUrl, httpContent).GetAwaiter().GetResult();
我需要从 httpclient 转移到 restclient。 由于 api 调用在 postman 和 postman 工作,因此使用 RestSharp。 此链接对我解决问题有很大帮助。 下面是工作代码。
var certPath = _fileProvider.Combine(_fileProvider.MapPath("~/Plugins/Payments.CityBankApi/"), "othoba.pfx");
string tokenUrl = "https://ecomm-webservice.thecitybank.com:7788/transaction/token";
string crtPassword = _cityBankPaymentSettings.CrtPasswordProduction;
if (!_cityBankPaymentSettings.ProductionMode)
{
tokenUrl = "https://sandbox.thecitybank.com:7788/transaction/token";
crtPassword = _cityBankPaymentSettings.CrtPasswordSandBox;
}
var client = new RestClient(tokenUrl);
client.Timeout = -1;
X509Certificate2 certificate = new X509Certificate2(certPath, crtPassword);
client.ClientCertificates = new X509CertificateCollection() { certificate};
client.RemoteCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true; //Important without this line it does not work.
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/json");
var body = JsonConvert.SerializeObject(new
{
userName = _cityBankPaymentSettings.UserName,
password = _cityBankPaymentSettings.Password
});
request.AddParameter("application/json", body, ParameterType.RequestBody);
IRestResponse response = await
client.ExecuteAsync(request);
var cityBankAccessToken = JsonConvert.DeserializeObject<CityBankAccessTokenResponeModel>(response.Content);
对于从.ctr 和.key 生成.pfx,我需要在要生成.pfx 的文件夹中编写以下命令。 我使用 git bash 执行命令。
//openssl pkcs12 -export -out createorder.pfx -in createorder.crt -inkey createorder.key -password pass:02468
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.