2017-11-30 28 views
0

証明書が無効であるというエラーが発生する理由を誰かに教えてもらえますか? PowerShellで、私はInvoke-WebRequestのIPアドレスを使用し、証明書のCNと一致するようにホストヘッダーを設定すると、私はcertエラーを取得しません。私はHttpClientは同じだろうと思いますか?HttpClient証明書のエラー

var spHandler = new HttpClientHandler(); 
var spClient = new HttpClient(spHandler); 
spClient.BaseAddress = new Uri("https://10.0.0.24"); 
var spRequest = new HttpRequestMessage(HttpMethod.Get, "/api/controller/"); 
spRequest.Headers.Host = "somehost.com"; 
var spResponse = await spClient.SendAsync(spRequest); 

エラー:

WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. 
AuthenticationException: The remote certificate is invalid according to the validation procedure. 

このコードは、モニタユーティリティの一部であり、我々は、ロードバランサの背後にある各Webフロントエンドを探査することができるようにする必要があります。私たちはこれをPowerShellで多く行いました。私は証明書と一致するようにHostヘッダーを設定している限り、この問題は見たことがありません。

答えて

0

HttpClientのデフォルトの動作は、証明書に問題がある場合にエラーをスローすることです。あなたは、この動作を回避したい場合は

、あなたはそれにあなたのコードを変更することができます:

var spHandler = new HttpClientHandler() 
{ 
    ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => 
    { 
    Console.WriteLine($"Sender: {sender}"); 
    Console.WriteLine($"cert: {cert}"); 
    Console.WriteLine($"chain: {chain}"); 
    Console.WriteLine($"sslPolicyErrors: {sslPolicyErrors}"); 
    return true; 
    } 
}; 

var spClient = new HttpClient(spHandler); 
spClient.BaseAddress = new Uri("https://10.0.0.24"); 
var spRequest = new HttpRequestMessage(HttpMethod.Get, "/api/controller/"); 
spRequest.Headers.Host = "somehost.com"; 
var spResponse = await spClient.SendAsync(spRequest); 

すべてConsole.WriteLineものはちょうどあなたが証明書情報を確認することです、あなたは何が起こっているかを理解した後、あなたはそれを削除することができますに。

return trueは、証明書の問題を回避するものです。

プロダクションで使用するときは注意してください。証明書の問題をチェックするのが最善の方法です。

関連する問題