#初めに
CefSharpを使って自動ログインブラウザを作っていた際に、ログインするサイトがSSL証明書エラーでアクセスできず、1日ほど詰まったので、解決方法を共有します。
#環境
Windows10 HOME
Visual Studio 2019 Community
#ライブラリ
.NET framework
CefSharp.WinForms
#問題
SSL証明書エラーが出るサイトにCefSharpブラウザからアクセスできない。
アクセスしようしても真っ白い画面が表示されるだけ。
#解決方法
RequestHandlerを実装する。
ExampleRequestHandler.cs
using CefSharp;
using CefSharp.Handler;
using System.Threading.Tasks;
namespace CefSharpTest
{
public class ExampleRequestHandler : RequestHandler
{
protected override bool OnCertificateError(IWebBrowser chromiumWebBrowser, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback)
{
Task.Run(() =>
{
if (!callback.IsDisposed)
{
using (callback)
{
// 許可するURL
if (requestUrl.ToLower().Contains("https://expired.badssl.com/"))
{
callback.Continue(true);
}
else
{
callback.Continue(false);
}
}
}
});
return true;
}
}
}
Form1でインスタンス化。
From1.cs
using CefSharp;
using CefSharp.WinForms;
using System.Windows.Forms;
namespace CefSharpTest
{
public partial class Form1 : Form
{
public ChromiumWebBrowser cefBrowser;
private string URL = "https://expired.badssl.com/";
public Form1()
{
InitializeComponent();
// CefCharp初期設定
CefSettings set = new CefSettings();
set.Locale = "ja";
set.AcceptLanguageList = "ja-JP";
set.LogSeverity = LogSeverity.Disable;
CefSharpSettings.ShutdownOnExit = false;
Cef.Initialize(set);
// CefSharpのWebViewを作成する。
// ページを表示。
cefBrowser = new ChromiumWebBrowser(URL);
// コントロールを追加する。
this.Controls.Add(cefBrowser);
cefBrowser.Dock = DockStyle.Fill;
cefBrowser.BringToFront();
// 先ほど実装したRequestHandlerをインスタンス化
cefBrowser.RequestHandler = new ExampleRequestHandler();
}
}
}