よほどセキュリティの厳しいWebサイト(サービス)にアクセスすることが無い限りは出くわさないのですが、
Webサイトによっては、クライアント証明書による認証を必要とするケースがあります。
クライアント証明書は通常一度OSやWebブラウザに登録すればそれでいいんですが、
基本的に新規にアクセスするたびにクライアント証明書をWebブラウザで選択する必要が出ることがあります。
(補足:今回のユースケースは、プログラムでWebサービスにアクセスする際のクライアント証明書利用の話ではなく、
Webブラウザを利用してWebサイトにアクセスする際の話になっています。)
クライアント証明書1個だけでも面倒になりますが、複数のクライアント証明書を登録していると
複数の証明書の中から手動で選択する作業が必要になるケースがあり、煩わしく感じることもあります。
WebブラウザやOSによりますが、アクセスするWebページに合わせてクライアント証明書を自動選択することが可能です。
前提条件
以下の操作に関しては、PCにクライアント証明書は登録済み。という前提としています。
また、基本的に Windows + Chrome をターゲットにしています。
設定方法
以下のリンク先にある通り、AutoSelectCertificateForUrls
というポリシーへの設定の追加で自動選択ができます。
Windowsの場合レジストリで以下のパスへの設定が必要になります
- パス
Software\Policies\Google\Chrome\AutoSelectCertificateForUrls
- 値の名前
- 1、2、3、...
- 値の種類
- REG_SZ (の一覧)
値として以下のような URLのパターン と 利用するクライアント証明書を選択する条件を JSON 文字列形式で指定します。
{ "pattern": "$URL_PATTERN", "filter" : $FILTER }
レジストリへの登録なので、regedit
でレジストリエディターを起動して手動でも登録ができますが、
以下のような内容の .reg ファイルを用意して実行するのもよいかと思います。
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls] "1"="{\"pattern\":\"https://dummy.web-page-A.org\",\"filter\":{\"ISSUER\":{\"CN\":\"Client-Certificate-A\"}}}" "2"="{\"pattern\":\"https://dummy.web-page-B.org\",\"filter\":{\"ISSUER\":{\"CN\":\"Client-Certificate-B\", \"O\":\"Organization-B\"}}}"
- ここでは2つのWebサイトに対して、それぞれ別のクライアント証明書を選択するように値を指定しています。
- .reg ファイルに書く場合は 上記の例のように JSON 形式の文字列内でエスケープが必要になります。
登録した後、レジストリエディター上で見ると以下のようになります。
これで、Chromeを起動しなおせば指定のWebサイトではクライアント証明書が自動選択されるようになります。
MS Edge の場合
Microsoft Edge の場合はレジストリのパスが SOFTWARE\Policies\Microsoft\Edge\AutoSelectCertificateForUrls
になります
補足
Selenium 等で対象のWebサイトにアクセスした際に、クライアント証明書の選択部分はSeleniumでは制御できないようです。
このような場合に、クライアント証明書が自動選択されるようにしておけば、クライアント証明書の選択から先に処理を進めることができない。という問題を解消できます。