HttpClientHandler の ServerCertificateCustomValidationCallback にセットしたコールバック内で、証明書と証明書チェインを取り出すことができた。
using System; using System.Collections.Generic; using System.Net.Http; using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; namespace CertificateSample { internal class Program { static async Task Main(string[] args) { var certificates = new List<X509Certificate2>(); var handler = new HttpClientHandler() { ServerCertificateCustomValidationCallback = (request, cert, chain, errors) => { // 証明書と証明書チェインを複製 foreach (var chainElement in chain.ChainElements) { certificates.Add(new X509Certificate2(chainElement.Certificate.RawData)); } certificates.Add(new X509Certificate2(cert.RawData)); return true; }, }; var client = new HttpClient(handler); await client.GetAsync("https://tnakamura.hatenablog.com"); foreach (var certificate in certificates) { Console.WriteLine($"サブジェクト: {certificate.Subject}"); Console.WriteLine($"発行元: {certificate.Issuer}"); Console.WriteLine($"有効期間開始時刻: {certificate.NotBefore}"); Console.WriteLine($"有効期間終了時刻: {certificate.NotAfter}"); foreach (var extension in certificate.Extensions) { Console.Write($"{extension.Oid.FriendlyName}:"); Console.WriteLine(extension.Format(true)); } } Console.WriteLine("Enter で終了"); Console.ReadLine(); } } }