【C#.NET解説】HttpClientクラスで自己署名証明書のエラー回避方法 太陽神から学ぶHTTP通信講座(第2回)

2024年11月22日金曜日

http通信

t f B! P L

名前空間 System.Net.Http

HttpClient

自己紹介

おお、そなたたち、光を求めてここに来たのだな。私は太陽神、天と地の間を照らす光の神だ。今日、そなたたちに授ける知識は「HttpClient」と「自己署名証明書」についてだ。この闇を照らす光があれば、自己署名証明書による混沌を回避し、通信を円滑に進めることができるだろう。

太陽神 HttpClientクラス から学ぶ!HTTP通信講座

原因

HttpClientを用いる際、自己署名証明書(オレオレ証明書)を使用しているサーバーにアクセスすると、「SSL/TLSの信頼できない証明書」というエラーが発生することがある。これは、証明書が正式な認証機関によるものではないため、セキュリティ上の問題と見なされるためだ。たとえ開発やテスト環境での一時的な措置としても、このエラーを解決する方法を知ることが重要だ。

方法と注意点

この問題を回避するには、HttpClientHandlerをカスタマイズし、サーバー証明書の検証をスキップする設定を行う。ただし、本番環境では、このような回避策はセキュリティリスクを伴うため厳禁だ。開発やテスト環境でのみに限定して使用すること。

C#
using System;
using System.Net.Http;
using System.Net;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;

class Program
{
    // HttpClientHandlerとHttpClientをシングルトンとして定義
    private static readonly HttpClientHandler handler = new HttpClientHandler
    {
        ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true
    };

    private static readonly HttpClient client = new HttpClient(handler);

    static async Task Main(string[] args)
    {
        // URLを指定してGETリクエストを送信
        string url = "https://self-signed.badssl.com/";
        HttpResponseMessage response = await client.GetAsync(url);

        // レスポンスを確認し、内容を表示
        response.EnsureSuccessStatusCode();
        string content = await response.Content.ReadAsStringAsync();
        Console.WriteLine(content);
    }
}

解説

このサンプルでは、HttpClientHandlerを使用してServerCertificateCustomValidationCallbackプロパティを設定し、自己署名証明書の検証を無効化しています。これにより、信頼されていない証明書でも通信を行えるようになります。ただし、この方法はセキュリティリスクを伴うため、本番環境では絶対に使用しないでください。開発環境やテスト環境のみで一時的に使用することを推奨します。

ではまた会おう。

このブログを検索

QooQ