目次
はじめに
- サーバ証明書、クライアント証明書等のX.509証明書を作成する際に経験したエラーの原因と対応例の紹介です。
- Windows環境で証明書を確認した際の「証明書の状態エラー」、ブラウザ(Chrome)でWebページにアクセスした際に表示される「ブラウザのエラー」に分けて紹介します。
- サーバ証明書、クライアント証明書の作成例はこちらで紹介しています。
- ここでは、Windows環境で証明書を作成する前提で、PowerShellによるコマンド例を記載しています。
証明書の状態エラー
ルート証明書が信頼されていない
信頼されたルート証明機関のストアに存在しないためこの CA ルート証明書は信頼されていません。
- ルート証明書を作成しただけでは信頼されず、この警告が出ます。
- 作成したルート証明書を「信頼されたルート証明機関」にインストールすれば、信頼された証明書として認識されるため、この警告は出なくなります。
選択された目的には有効でない
この証明書は選択された目的には有効でないと思われます。
(This Certificate is not valid for the selected purpose)
- キー使用方法(-KeyUsageオプション)が適切に指定されていないルート証明書でサーバ証明書を署名すると、この警告が出ます。
- 警告を無視して、ルート証明書とサーバ証明書をWebサーバで公開すると、次の警告が出ます。
Chromeでは、警告画面に”NET::ERR_CERT_AUTHORITY_INVALID”と表示されており、正しいルート証明書として認識していないようです。 - キー使用方法(Key Usage)として「電子証明書の検証(CertSign)」「CRLの署名検証(CRLSign)」を指定したルート証明書を作成し、サーバ証明書を再作成する必要があります。
署名に使用する証明書の不正
証明のパスの証明機関は証明書を発行する権限がないか、この証明書をエンドエンティティ証明書として使うないとができないため、この証明書は無効です。
- 基本制限(Basic Constraints: 2.5.29.19)で「認証局ではない(エンドエンティティ)」を指定したルート証明書で、サーバ証明書を作成するとこのエラーになります。
- 私の場合、次のようにルート証明書を作成した際の基本制限の指定方法が間違った結果、エンドエンティティになっていました。(この場合、コマンドは正常に終了していました。)12345New-SelfSignedCertificate <code>-Subject myrootca -NotAfter $(Get-Date).AddDays(3650)-CertStoreLocation cert:\CurrentUser\My <code>-KeyUsage CertSign,CRLSign-TextExtension @("2.5.29.19={text}CA:true") # 正しくは"CA=true"
ブラウザのエラー
ERR_SSL_KEY_USAGE_INCOMPATIBLE
- Chromeでhttpsのページを開くと、Chromeのエラーページ(ERR_SSL_KEY_USAGE_INCOMPATIBLE)が表示されます。
- サーバ証明書の「キー使用方法(Key Usage)」で、digitalSignature(署名の検証), keyEncipherment(鍵交換で鍵を暗号化)が含まれていない場合に発生します。
- サーバ証明書作成時に、それらを指定することで解決しました。123456$server = New-SelfSignedCertificate <code>-DnsName localhost -NotAfter $(Get-Date).AddDays(3650)-CertStoreLocation cert:\CurrentUser\My <code>-Signer $rootca-KeyUsage DigitalSignature,KeyEncipherment `-TextExtension @("2.5.29.19={text}CA=false", "2.5.29.37={text}1.3.6.1.5.5.7.3.1")
リンク