asp.net 根据验证过程,远程证书无效

ryoqjall  于 2022-12-20  发布在  .NET
关注(0)|答案(2)|浏览(272)

我已经下载了一个产品的试用版,它通过https提供API。目前在我的asp.net mvc web应用程序中,我正在执行以下操作来执行对该产品试用版的API调用:-

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(RackJoin rj, FormCollection formValues)
        {
            string controllername = RouteData.Values["controller"].ToString();
            if (ModelState.IsValid)
            {
                var message = "";
                var status = "";
                long assetid = new long();
                XmlDocument doc = new XmlDocument();
                using (var client = new WebClient())
                {
                    var query = HttpUtility.ParseQueryString(string.Empty);
                    foreach (string key in formValues)
                    {
                        query[key] = this.Request.Form[key];
                    }

query["username"] =  System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"];
query["password"] =  System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"];
string apiurl = "https://win-spdev:8400/servlets/AssetServlet";
//code goes here…..
                    var url = new UriBuilder(apiurl);
                    url.Query = query.ToString();

但我会得到下面的Security.Authentication.AuthenticationException,异常:-
出现错误:系统。安全性。身份验证。AuthenticationException:根据验证过程,远程证书无效。
位于System.Net.Security.SslState.的StartSendAuthResetSignal(协议令牌消息、异步协议请求异步请求、异常异常)位于System.Net.Security.SslState.的CheckCompletionBeforeNextReceive(协议令牌消息、异步协议请求异步请求)位于System.Net.Security.SslState.的StartSendBlob(字节[]传入、...

请记住,如果我直接从Web浏览器调用API,则调用API不会出现任何问题,如下所示:-

https://win-spdev:8400/servlets/AssetServlet?username=tmsservice&password=test2test2&assetType=Rack&operation=UpdateAsset&assetName=rack9090909858585&accountName=GROUP&siteName=test%20site&productName=rackproductone

那么这个问题是否与API是基于https的有关,既然我在开发机器中使用的是产品的试用版,我是否应该安装有效的证书?或者这个问题与安全认证无关?谢谢

qcuzuvrc

qcuzuvrc1#

问题是你没有配置一个有效的SSL证书。由于有效的SSL证书需要花钱,出于开发的目的,我猜你使用了一个自动签名的证书。你可以通过设置Application_Start中的ServerCertificateValidationCallback静态属性来忽略这些错误:

System.Net.ServicePointManager.ServerCertificateValidationCallback += 
    (s, cert, chain, sslPolicyErrors) => true;

注意:请避免在生产中执行此操作。在LIVE上部署时,请确保使用有效的SSL证书。

9lowa7mx

9lowa7mx2#

向Darin Dimitrov点头致意...... VB.NET用户可以使用此代码(在我的Web应用程序的Global.asax.vb中):

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(s, cert, chain, sslPolicyErrors)
                                                                       Return True
                                                                     End Function
End Sub

相关问题