SSL Peer Certificate Untrustedエラーの原因と解決方法を徹底解説

目次

はじめに

本記事の目的

本記事は「SSL Peer Certificate Untrusted」エラーの原因と対処法を分かりやすく説明することを目的としています。専門的な用語は必要最小限にし、具体例や手順を示して誰でも取り組めるようにします。

この章で読み取れること

  • エラーの概要と影響範囲
  • 記事全体の構成と各章で扱う内容
  • 事前に用意しておくと便利な情報(サーバーのログ、証明書ファイル、利用しているクライアント情報など)

読者対象

  • サイト運営者やサーバー管理者
  • 開発者や運用担当者
  • ブラウザやAPIで接続時に証明書エラーが出た方

全体の流れ(簡単な案内)

第2章でエラーの意味を平易に説明し、第3章で発生原因を整理します。第4章で実際のエラー例とログを示し、第5章で解決策を提示します。第6章はトラブルシューティングの進め方、第7章はセキュリティ面での注意点、第8章はよくある質問をまとめます。

始めに準備を整えてから順を追って確認すると、原因特定と対応が速く進みます。次章から具体的に見ていきましょう。

SSL Peer Certificate Untrustedとは何か?

概要

「SSL Peer Certificate Untrusted」は、通信相手が提示したSSL/TLS証明書をシステムが信頼できないと判断したときに発生するエラーです。多くはサーバーやクライアントの証明書が信頼された認証局(CA)で署名されていない、または証明書チェーンが欠落している場合に起こります。

平易な説明

ウェブサイトやAPIは証明書を使って身元を証明します。相手の証明書に問題があると、通信を安全と判断できません。すると接続を拒否したり警告を出したりします。これは「相手の身分証が信用できない」と同じ意味です。

どんな場面で起きるか(具体例)

  • ブラウザでサイトに接続した際に警告が出る
  • curlやwgetでAPIにアクセスするとエラーになる
  • アプリ間のTLS接続でハンドシェイクが失敗する

何が問題になるか(影響)

重要なデータが送れない、サービスの自動連携が止まる、ユーザーに不安を与えるなどの影響があります。業務システムでは可用性や信頼性に直結します。

簡単な確認手順

  1. 証明書の発行元(Issuer)を確認する
  2. 証明書チェーンが完全か確認する
  3. 証明書の有効期限を確認する
  4. クライアント側で信頼するCAリストに含まれているか確認する

次章では、より具体的な発生原因を詳しく説明します。

主な発生原因

SSL Peer Certificate Untrusted が発生する代表的な原因を、分かりやすく整理します。

1) 自己署名証明書の利用

開発環境や内部システムで自己署名証明書や私的CA発行の証明書を使うと、多くのOSやブラウザはそれを信頼しません。例:ローカルで作った証明書をブラウザで開くと警告が出ます。対処:信頼されたCAの証明書を使うか、クライアント側に私的CAを登録します。

2) 中間証明書・ルート証明書の導入ミス

サーバーが証明書チェーンを正しく送らないと、クライアントは途中で信頼を判断できません。よくあるミスは中間CAの未設定です。確認方法:openssl s_client -connect :443 -showcerts でチェーンを確認します。

3) 証明書の有効期限切れ・ホスト名不一致・誤用

証明書が期限切れ、または証明書のCN/SANに接続先ホスト名が含まれていない場合にエラーとなります。別用途の証明書(例:メール用をHTTPSで使う)も問題です。

4) クライアント側の証明書ストア未登録

必要なCA証明書がクライアント端末やサーバーのストアに登録されていないと信頼できません。企業内の端末やCI環境で起きやすいです。確認方法:OSやブラウザの証明書管理画面でCAが存在するか確認します。

具体的なエラー例とログ

SAP環境での例

  • エラー例: SSSLERR_PEER_CERT_UNTRUSTED
  • ログ例:
    2025-03-12 10:15:23 ERR /sap/bc/srt/rfc/sap/XYZ SSSLERR_PEER_CERT_UNTRUSTED: SSL handshake failed – peer certificate not trusted (subject=”CN=api.example.com”, issuer=”CN=Untrusted CA”, serial=0x1234)
  • 説明: SAPでは信頼ストアにルート/中間証明書が無いか、有効期限切れ・チェーン不備が原因で発生します。

RStudio / Posit Connect の例

  • エラー例: “Peer certificate cannot be authenticated with known CA certificates”、”The URL does not appear to belong to a valid server”
  • ログ例:
    2025-04-01T08:05:01Z ERROR deploy: Failed to fetch content: Peer certificate cannot be authenticated with known CA certificates (URL: https://api.example.com)
  • 説明: デプロイ時や外部API呼び出しでCAチェーンが検証できないときに出ます。

Cisco AnyConnect / Firewall の例

  • 表示例: “Untrusted server blocked”、”SSL certificate validation failed: untrusted root”
  • ログ例:
    Apr 10 12:00:00 firewall1 %ASA-3-SSL_CONN_FAIL: SSL handshake failed: untrusted root (CN=vpnhost.example.com)
  • 説明: VPNやファイアウォールは未検証の証明書を標準で遮断します。

ログの読み方(共通ポイント)

  • タイムスタンプ、プロセス名、エラーコードを確認します。
  • 証明書のSubject/Issuer/シリアル/フィンガープリントを探します。
  • 中間証明書の欠如、ホスト名不一致、期限切れがないかを確認します。

収集のヒント

  • openssl s_client -connect api.example.com:443 -showcerts で証明書チェーンを取得します。
  • ブラウザやシステムの信頼ストアとIssuerを比較してください。

次章で具体的な解決手順を順を追って説明します。

主な解決策

1) 正しい証明書チェーンのインストール

サーバーには中間CAやルートCAを含む「フルチェーン」を入れてください。多くの認証局は中間証明書をまとめたファイルを提供します。例:ApacheはSSLCertificateFileにフルチェーン、Nginxはssl_certificateにフルチェーンを指定します。確認はopenssl s_client -connect example.com:443 -showcertsで行います。

2) クライアント側ストアへのCA登録

クライアントが必要なCAを信頼していない場合、OSやアプリ側にCA証明書を追加します。例:Windowsはmmcで「信頼されたルート証明機関」にインポート、Linuxは/usr/local/share/ca-certificates/へ追加してupdate-ca-certificates、Javaはkeytoolでcacertsに登録、SAPはSTRUSTでインポートします。

3) VPNやミドルウェアの設定変更

Cisco AnyConnectなどには「信頼されていないサーバーをブロック」等の設定があります。一時的な検証のために無効化できますが、運用での無効化はセキュリティリスクが高いため推奨しません。

4) 証明書再発行・再インストール

インストール手順やCSRに誤りがある場合は、鍵ペアとCSRを再生成して証明書を再発行し、フルチェーンで改めてインストールしてください。コモンネームやSANが正しいか、有効期限や鍵形式(RSA/EC)を確認します。

5) 基本的なチェックリスト

  • サーバーの証明書有効期限とチェーン
  • ホスト名(CN/SAN)の一致
  • クライアント時刻の同期
  • 中間証明書がサーバーに含まれているか
  • プロキシやミドルウェアで証明書を置換していないか

これらを順に確認・修正すると多くの「SSL Peer Certificate Untrusted」問題を解決できます。

トラブルシューティングのポイント

確認の順序

トラブル時は順序立てて確認すると早く解決できます。まずは証明書チェーン、次に信頼ストア、最後にログと設定を確認します。

証明書チェーンの確認

ブラウザの証明書表示や以下のコマンドで、サーバーが中間証明書を含めて正しく送っているか確認します。

openssl s_client -connect example.com:443 -showcerts

サーバーが中間証明書を送らないとクライアント側で未検証となります。

信頼ストアの確認

  • SAP: STRUSTで該当CAが登録されているか確認します。
  • Windows: 証明書管理ツール(certmgr.msc)でルート/中間CAを確認します。
  • Linux: /etc/ssl/certs や update-ca-certificates を確認します。
  • Java: keytoolでcacertsを確認・更新します。

ログ・再現方法

ブラウザの開発者ツール、curl -v、opensslコマンドで再現して原因ログを取得します。SAPならdev_icmログや通信ログを確認します。

よくあるチェック項目

  • 証明書の有効期限
  • CN/SANのホスト名一致
  • サーバーがフルチェーンを送信しているか
  • システム時刻が正しいか
  • 中間CAの未登録や古いCAバンドル

上記を順に確認すると原因特定が速くなります。必要であれば各手順の具体的コマンドや画面操作を補足します。

セキュリティ上の注意

なぜ信頼されていない証明書が危険か

信頼されていない証明書を許可すると、暗号化された通信の相手を正しく確認できなくなります。これにより中間者攻撃(MITM)により通信内容が盗聴・改ざんされるリスクが高まります。例えば、開発環境でcurl -kやブラウザの例外を使うと、意図せず機密情報を漏らす可能性があります。

一時的な例外を許可する場合の注意点

どうしても例外を使う場合は短期間・限定的に留めてください。対象を特定のIPやホストに限定し、例外の期限を明確にします。運用担当者は例外発生時に記録を残し、再発防止策を計画してください。

安全に運用するための具体的対策

  • 正規の証明書を取得・更新する(Let’s Encryptなど自動化が便利です)。
  • サーバー証明書のチェーンと有効期限を監視し、期限切れを防ぎます。
  • 証明書ピンニングやOCSP/CRLによる失効確認を導入すると信頼性が向上します。

ログと監査

証明書エラーや一時許可の記録を必ず残してください。ログから異常なアクセスや繰り返す例外を早期に検知できます。定期的にログをレビューし、必要ならポリシーを見直します。

ユーザー教育

開発者や運用担当者に証明書の重要性を周知してください。安易に例外を許可しない、警告を無視しない、といった基本ルールを設けます。

よくある質問・FAQ

Q: 自己署名証明書を使いたい場合は?

クライアント側にその自己署名証明書を明示的に「信頼できるCA」として登録すれば、一時的に接続できます。手順はOSやブラウザごとに異なりますが、開発環境や社内限定でのみ使ってください。本番環境では信頼された証明機関(CA)発行の証明書を使うことを強くおすすめします。

Q: 証明書がインストールされているのにエラーが出る?

多くは証明書チェーンの不備(中間CAが欠ける等)です。サーバーが中間証明書を正しく送信しているか、正しい証明書ファイルを設定しているかを確認してください。オンラインのSSLチェッカーや「openssl s_client -connect ホスト:ポート -showcerts」で送信チェーンを確認できます。

Q: 更新後もエラーが続く場合は?

サーバーの再起動やサービスの再読み込み、ブラウザのキャッシュやOSの証明書キャッシュをクリアしてください。証明書ファイル名やキーストア設定が古いままのこともあります。

Q: 開発環境だけで発生するのはなぜ?

開発機は信頼ストアが異なったり、自己署名や内部CAを使っている場合が多いです。クライアント側に正しいCAを登録するか、テスト用に正規の証明書を使うと解消します。

推奨:本番は必ず信頼されたCA発行の証明書と、完全なチェーンを用意してください。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次