| この記事の要点 |
|---|
|
エラー内容
| curl: (51) SSL: certificate subject name '~' does not match target host name '~' |
curl でHTTPS接続したとき、サーバー証明書の CN (Common Name) または SAN (Subject Alternative Name) に、接続先ホスト名が含まれていない場合に発生する SSL 検証エラーです。証明書のドメインと接続先のドメインが一致しないことを意味します。
発生条件 / 原因
- 証明書がそのホスト名向けに発行されていない — 例:
example.com用証明書をapi.example.comで使っている - IPアドレスで直接アクセスしている —
https://192.168.0.10/など。証明書はホスト名向けに発行されているので不一致になる - 証明書のSANが古い — ドメイン追加後に証明書を更新していない
- 自己署名証明書/社内CA — テスト環境向けの証明書で、ホスト名情報が合っていない
- SNI(Server Name Indication)を解釈できないクライアントで、共有ホストの別ドメイン証明書が返っている
対処法
1. 接続先ホスト名と証明書の中身を確認
まず証明書のCN/SANに、接続したいホスト名が含まれているかを確認します。
| $ openssl s_client -connect example.com:443 -servername example.com < /dev/null | openssl x509 -noout -subject -ext subjectAltName |
Subject の CN と X509v3 Subject Alternative Name に対象ホスト名が無ければ、証明書側の問題です。
2. 正しいホスト名で接続する
証明書が example.com 用なら、IPやサブドメインではなく example.com でアクセスします。
| $ curl https://example.com/path |
3. IP接続だが特定ホストで証明書を検証したい場合
--resolve オプションを使うと、ホスト名を保ったままIPを指定できます。
| $ curl --resolve example.com:443:192.168.0.10 https://example.com/path |
4. 開発・検証用に検証をスキップ(本番禁止)
-k または --insecure オプションでSSL検証を無視できます。セキュリティ上、開発/検証以外では使わないでください。
| $ curl -k https://192.168.0.10/path |
5. 証明書側を直す(サーバー管理者側)
- 必要なホスト名を SAN に追加して証明書を再発行する
- Let's Encrypt なら
certbotで対象ドメインを追加して再発行 - ワイルドカード証明書(
*.example.com)に切り替える
注意点
-kは暗号化はされるが認証は無い状態になり、中間者攻撃の検知ができなくなる- 本番ではホスト名と証明書を必ず一致させる。AWS ALB/CloudFront などのCDN/LBを通すときも証明書のSANに注意
- curl のエラーコード
(51)は SSL 名前検証失敗。他に(60)(CA信頼失敗)と混同しないこと
子ページ
子ページはありません
同階層のページ
- curl: (51) SSL: certificate subject name '~' does not match target host name '~'
- mount: special device ... does not exist
- 【yum install php-fpm】エラー: パッケージ: php-fpm-5.4.16-46.el7.x86_64 (base)
- ファイルが開けません: https://centos7.iuscommunity.org/ius-release.rpm を飛ばします。
- File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
- unable to execute 'gcc': No such file or directory
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- djangoのテンプレートの作成とヘッダー・フッターの共通化 2026-10-03 21:41:49
- テンプレートフラグメント(ヘッダー等の共有化) 2026-10-03 21:41:49
- reCAPTCHA v3 使い方(サンプル付き) 2026-10-03 21:37:05
- Content-Type一覧|MIMEタイプとはとHTTPでの主な使用場面 2026-10-03 21:37:05
- SpringにおけるAOPの使い方 2026-10-03 21:37:05
- X (Twitter) API でツイートできないがエラーが出ない問題の原因と対処 2026-10-03 11:33:01
- X (Twitter) API アプリケーション登録完全ガイド|v2・Bearer Token・OAuth 2.0 PKCE 2026-10-03 11:33:01
- X (Twitter) API 完全ガイド|従量課金の料金・単価(2026年10月)と v2 移行 2026-10-03 11:32:40
- Google DeepMind とは?Gemini・AlphaFold の開発元 2026-10-03 11:26:56
- Cursor とは?AI 統合型コードエディタの使い方・料金 2026-10-03 11:26:56
- Claude (Anthropic) とは?AIチャットの使い方・モデルファミリ・API 2026-10-03 11:26:56
- AIベンダー一覧:OpenAI・Anthropic・Google DeepMind・Microsoft・Meta 2026-10-03 11:26:56
- クラウド・インフラ完全ガイド — AWS/Azure/GCP/Kubernetes 2026-10-03 11:26:56
- テキストエディタ完全比較 (VS Code / Cursor / Vim / Emacs / IDE) 2026-10-03 11:26:56
- プログラミング学習プラットフォーム|Scratch・micro:bit ほか 2026-10-03 11:26:56