8

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();

しかし、次の例外が発生します:-

エラーが発生しました:System.Security.Authentication.AuthenticationException: 検証手順によると、リモート証明書が無効です。System.Net.Security.SslState.StartSendAuthResetSignal (ProtocolToken メッセージ、AsyncProtocolRequest asyncRequest、例外例外) で System.Net.Security.SslState.CheckCompletionBeforeNextReceive (ProtocolToken メッセージ、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartSendBlob (バイト [ ] 着信、Int32 カウント、AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.ProcessReceivedBlob(Byte[] バッファー、Int32 カウント、AsyncProtocolRequest asyncRequest) で System.Net.Security.SslState.StartReadFrame(Byte[] バッファー、Int32 readBytes、 AsyncProtocolRequest asyncRequest) System.Net.Security.SslState.StartReceiveBlob(Byte[] バッファーで、

次のように 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 を超えていることに関連していますか?開発マシン内で製品の試用版を使用しているため、有効な証明書をインストールする必要がありますか? または、問題はセキュリティ認証に関連していませんか? ありがとう

4

2 に答える 2

32

問題は、有効な SSL 証明書を構成していないことです。有効な SSL 証明書にはお金がかかるため、開発目的で、自動署名証明書を使用したと思います。ServerCertificateValidationCallback次の静的プロパティを設定することで、これらのエラーを無視できますApplication_Start

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

注: 本番環境でこれを行うことは避けてください。LIVE にデプロイするときは、有効な SSL 証明書を使用していることを確認してください。

于 2013-08-07T11:41:15.207 に答える
2

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
于 2015-01-14T00:45:33.320 に答える