SSL 証明書のトラブルシューティング

トラブルシューティングの手順は、Google マネージド SSL 証明書を使用しているか、セルフマネージド SSL 証明書を使用しているかによって異なります。

Google マネージド証明書のトラブルシューティング

Google マネージド証明書の場合、次の 2 つのステータスがあります。

  • マネージド ステータス
  • ドメイン ステータス

マネージド ステータス

証明書のステータスを確認するには、次のコマンドを実行します。

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --global \
    --format="get(name,managed.status)"

マネージド ステータスの値は次のとおりです。

マネージド ステータス 説明
PROVISIONING

Google マネージド証明書が作成され、Google Cloud は認証局と連携して証明書に署名します。

Google マネージド証明書のプロビジョニングには、DNS とロードバランサの構成の変更がインターネットを経由して伝播された時点から最長で 60 分かかります。最近 DNS 構成を更新した場合、変更が完全に反映されるまでにかなりの時間がかかる可能性があります。通常は数時間程度ですが、世界的な反映には最長で 72 時間かかることもあります。DNS の伝播の詳細については、変更の伝播をご覧ください。

証明書が PROVISIONING 状態のままである場合は、正しい証明書がターゲット プロキシに関連付けられていることを確認してください。これを確認するには、gcloud compute target-https-proxies describe コマンドまたは gcloud compute target-ssl-proxies describe コマンドを実行します。

ACTIVE Google マネージド SSL 証明書が認証局から取得されます。ロードバランサで使用できるまでに、さらに 30 分かかる可能性があります。
PROVISIONING_FAILED 証明書が実際に ACTIVE である場合でも、簡単に PROVISIONING_FAILED を確認できる場合があります。ステータスを再確認してください。

ステータスが PROVISIONING_FAILED のままの場合、Google マネージド証明書は作成されましたが、認証局は署名できません。Google マネージド SSL 証明書の使用のすべての手順を完了していることを確認してください。

プロビジョニングが成功するかステータスが PROVISIONING_FAILED_PERMANENTLY に変わるまで、Google Cloud は再試行します。
PROVISIONING_FAILED_PERMANENTLY Google マネージド証明書は作成されましたが、認証局は DNS またはロードバランサの構成の問題により署名できません。この状態では、Google Cloud はプロビジョニングを再試行しません。

Google マネージド SSL 証明書の置き換え用の証明書を作成し、置き換え用の証明書がロードバランサのターゲット プロキシに関連付けられていることを確認してください。Google マネージド SSL 証明書の使用のすべてのステップを確認または完了します。その後、完全にプロビジョニングに失敗した証明書を削除できます。
RENEWAL_FAILED

ロードバランサまたは DNS 構成に問題があるため、Google マネージド証明書を更新できませんでした。マネージド証明書内のドメインまたはサブドメインが A/AAAA レコードを使用してロードバランサの IP アドレスを参照していない場合、更新処理は失敗します。既存の証明書は引き続き利用できますが、まもなく期限切れとなります。構成を確認してください。

ステータスが RENEWAL_FAILED のままの場合は、新しい証明書をプロビジョニングし、新しい証明書の使用に切り替えて、前の証明書を削除します

証明書の更新の詳細については、Google マネージド SSL 証明書の更新をご覧ください。

ドメイン ステータス

ドメインのステータスを確認するには、次のコマンドを実行します。

gcloud compute ssl-certificates describe CERTIFICATE_NAME \
    --global \
    --format="get(managed.domainStatus)"

この表では、ドメイン ステータスの値について説明します。

ドメイン ステータス 説明
PROVISIONING ドメインに対して Google マネージド証明書が作成されます。Google Cloud は認証局と連携して証明書に署名します。
ACTIVE ドメインは、証明書をプロビジョニングするために正常に検証されました。SSL 証明書が複数のドメイン用である場合は、すべてのドメインが ACTIVE ステータスで、証明書のマネージド ステータスACTIVE である場合にのみ、証明書をプロビジョニングできます。
FAILED_NOT_VISIBLE

ドメインの証明書のプロビジョニングが完了していません。次のいずれかが問題である可能性があります。

  • ドメインの DNS レコードが、Google Cloud ロードバランサの IP アドレスに解決されません。この問題を解決するには、DNS の A レコードと AAAA レコードを更新して、ロードバランサの IP アドレスを指定します。

    DNS は、ロードバランサの IP アドレス以外の IP アドレスに解決されないようにする必要があります。たとえば、A レコードが正しいロードバランサに解決され、AAAA は別のロードバランサに解決される場合、ドメインのステータスは FAILED_NOT_VISIBLE になります。

  • 更新された DNS A レコードと AAAA レコードが完全に伝播されるまで、かなり時間がかかることがあります。通常は数時間程度ですが、インターネットを介した反映には最長で 72 時間かかることもあります。ドメイン ステータスは、伝播が完了するまで FAILED_NOT_VISIBLE になります。
  • SSL 証明書がロードバランサのターゲット プロキシに適用されていません。この問題を解決するには、ロードバランサの構成を更新してください。
  • グローバル転送ルール用のフロントエンド ポートに、SSL プロキシを使用する外部プロキシ ネットワーク ロードバランサ用のポート 443 が含まれていません。この問題は、ポート 443 を使用して新しい転送ルールを追加すると解決できます。
  • Certificate Manager の証明書マップがターゲット プロキシに適用されます。適用された証明書マップが優先され、直接適用された証明書は無視されます。この問題は、プロキシから証明書マップを切断することで解決できます。
  • マネージド ステータスPROVISIONING の場合、ドメイン ステータスが FAILED_NOT_VISIBLE であっても、Google Cloud はプロビジョニングを再試行します。
FAILED_CAA_CHECKING ドメインの CAA レコードの構成の問題により、証明書のプロビジョニングに失敗しました。正しい手順で行っていることを確認します。
FAILED_CAA_FORBIDDEN ドメインの CAA レコードが、Google Cloud が使用する必要がある CA を指定していないため、証明書のプロビジョニングに失敗しました。正しい手順で行っていることを確認します。
FAILED_RATE_LIMITED 認証局にレート制限付きの証明書署名リクエストがあるため、証明書のプロビジョニングに失敗しました。新しい証明書のプロビジョニング、新しい証明書の使用への切り替え、前の証明書の削除が可能です。また、Google Cloud サポートに連絡することもできます。

マネージド証明書の更新

マネージド証明書内のドメインまたはサブドメインがロードバランサの IP アドレスを参照していない場合、またはロードバランサの IP とともに別の IP を参照している場合、更新処理は失敗します。更新の失敗を回避するには、すべてのドメインとサブドメインがロードバランサの IP アドレスを参照している必要があります。

セルフマネージド SSL 証明書のトラブルシューティング

このガイドでは、セルフマネージド SSL 証明書の構成に関する問題のトラブルシューティングについて説明します。

証明書を解析できない

Google Cloud Platform では、PEM 形式の証明書が必要です。証明書が PEM 形式の場合は、次の点を確認してください。

次の OpenSSL コマンドを使用して証明書を検証します。CERTIFICATE_FILE は、証明書ファイルのパスで置き換えます。

openssl x509 -in CERTIFICATE_FILE -text -noout

OpenSSL が証明書を解析できない場合:

共通名またはサブジェクト代替名がない

Google Cloud では、証明書に共通名(CN)またはサブジェクト代替名(SAN)属性のどちらかを設定する必要があります。詳細については、CSR を作成するをご覧ください。

どちらの属性も設定されていない場合に Google Cloud でセルフマネージド証明書を作成しようとすると、次のようなエラー メッセージが表示されます。

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 -   The SSL certificate is missing a Common Name(CN) or Subject Alternative
   Name(SAN).

秘密鍵を解析できない

Google Cloud では、秘密鍵の基準を満たす PEM 形式の秘密鍵が必要です。

次の OpenSSL コマンドで秘密鍵を検証します。PRIVATE_KEY_FILE は秘密鍵のパスで置き換えます。

    openssl rsa -in PRIVATE_KEY_FILE -check

次のレスポンスは、秘密鍵の問題を示しています。

  • unable to load Private Key
  • Expecting: ANY PRIVATE KEY
  • RSA key error: n does not equal p q
  • RSA key error: d e not congruent to 1
  • RSA key error: dmp1 not congruent to d
  • RSA key error: dmq1 not congruent to d
  • RSA key error: iqmp not inverse of q

この問題を解決するには、新しい秘密鍵と証明書を作成する必要があります。

パスフレーズを含む秘密鍵

OpenSSL でパスフレーズが求められた場合、秘密鍵からパスフレーズを削除してから、Google Cloud で使用する必要があります。次の OpenSSL コマンドを使用できます。

openssl rsa -in PRIVATE_KEY_FILE \
    -out REPLACEMENT_PRIVATE_KEY_FILE

プレースホルダを有効な値に置き換えます。

  • PRIVATE_KEY_FILE: パスフレーズで保護されている秘密鍵のパス
  • REPLACEMENT_PRIVATE_KEY_FILE: 書式なしテキストの秘密鍵のコピーを保存するパス。

有効期限が近い中間証明書

サーバー(リーフ)証明書の前に中間証明書が期限切れになった場合、CA がベスト プラクティスに従っていない可能性があります。

中間証明書が期限切れになると、Google Cloud で使用されるリーフ証明書が無効になることがあります。これは、次のように SSL クライアントによって異なります。

  • 一部の SSL クライアントは、リーフ証明書の有効期限のみを確認し、期限切れの中間証明書を無視します。
  • 一部の SSL クライアントは、期限切れの中間証明書を持つチェーンを無効として扱い、警告を表示します。

この問題を解決するには:

  1. CA が新しい中間証明書に切り替わるのを待ちます。
  2. 新しい証明書をリクエストします。
  3. 新しい鍵で新しい証明書を再度アップロードします。

CA が中間証明書に対するクロス署名を許可している場合もあります。CA に確認してください。

RSA 公開指数が大きすぎる

次のエラー メッセージは、RSA 公開指数が 65537 より大きい場合に表示されます。RFC 4871 で指定されているように、必ず 65537 を使用してください。

ERROR: (gcloud.compute.ssl-certificates.create) Could not fetch resource:
 -   The RSA public exponent is too large.

target-proxy から SSL 証明書を削除する

次の手順で、ターゲット https プロキシに適用されている単一の SSL 証明書を削除する方法を示します。

  1. target-https-proxy を一時ファイルにエクスポートします。

    gcloud compute target-https-proxies export TARGET_PROXY_NAME > /tmp/proxy
    
  2. /tmp/proxy ファイルを編集して次の行を削除します。

    sslCertificates:
    -   https://www.googleapis.com/compute/v1/projects/...
    
  3. /tmp/proxy ファイルをインポートします。

    gcloud compute target-https-proxies import TARGET_PROXY_NAME \
       --source=/tmp/proxy
    
  4. 省略可: SSL 証明書を削除します。

    gcloud compute ssl-certificates delete SSL_CERT_NAME
    

次のように置き換えます。

  • TARGET_PROXY_NAME: ターゲット HTTPS プロキシ リソースの名前。
  • SSL_CERT_NAME: SSL 証明書の名前。