2016-07-14 18 views
1

アプリケーションを本番環境に展開する前に、.NET Webアプリケーションから下位環境の数値APIを呼び出します。 APIをホストするサーバーでは、信頼できる認証局によって署名された証明書がない傾向があります。 ServicePointManager.ServerCertificateValidationCallbackがWindows Server 2012 R2上で動作しない

は、私たちの本番環境でこのコードを実行している除外するために、安全で、回避策として次のコードを作成しました:

if (ignoreCertErrors && environmentName.ToLower() != "PROD") 
{ 
    ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
} 

両方ignoreCertErrorsとenvironmentNameは、このロジックが含まれているメソッドに提供されるパラメータです。

これは私の地元の開発ボックス(Windows 7の)で働いていたが、私は、Windows 2012 R2のテストサーバーにそれを展開したときに、まだ信頼されていない本命とAPIへの私の呼び出しは以下のエラーで失敗する:

===================================== ================ メッセージ:基になる接続が閉じられました:予期しないエラー が送信で発生しました。スタックトレース:System.Net.HttpWebRequest.EndGetResponse(たIAsyncResult asyncResult)System.Net.Http.HttpClientHandler.GetResponseCallbackで
(IAsyncResultar)で

============== ========================================== = メッセージ:トランスポート接続からデータを読み取ることができません: 既存の接続はリモートホストによって強制的に閉じられました。 スタックトレース:System.Net.TlsStream.EndWrite(たIAsyncResult asyncResult)System.Net.ConnectStream.WriteHeadersCallbackで
(たIAsyncResultのAR)で

============== ========================================== = メッセージ:既存の接続が強制的にリモート・ホスト スタックトレースによって閉じた:
System.Net.Sockets.Socket.EndReceiveで (たIAsyncResult asyncResult)
System.Net.Sockets.NetworkStream.EndRead(たIAsyncResult asyncResult)で

======================================= ================

このロジックを変更する必要がありますか、またはWindows Server 2012 R2の証明書の警告を無視するために何か新しいことを行いますか?

+0

おそらく環境とは無関係ですが、environmentName.ToUpper()!= "PROD"を意味しましたか? – jtmnt

+0

それは良いキャッチです、私たちはまだ生産に行っていなかった。どちらの場合でもまだ真実であるため、コードは実行されるため、問題は解決しません。 – Josh

+0

サーバSSL3を有効または無効にしていますか? https://technet.microsoft.com/en-us/library/security/3009008.aspx。 https://www.digicert.com/ssl-support/iis-disabling-ssl-v3.htm – jtmnt

答えて

0

私はこれとは別の方法でアプローチするつもりですが、私はエラーメッセージに関連してquestionを作成し、解決策を提案します。

関連する問題