はじめに
目的
本記事は、WebサイトやサーバーでのSSL通信(HTTPS)の確認方法を、初心者から中級者向けにやさしく解説することを目的とします。ブラウザでの簡単な確認から、opensslなどを使った詳しい検査方法まで順を追って説明します。
対象読者
・自分のサイトが安全か確かめたいサイト運営者
・勤務先のWebサービスの担当者
・基本的な確認方法を学びたいエンジニアや学生
本記事で学べること
・ブラウザでの見た目の確認(鍵マークやURLの確認)
・証明書の有効期限や発行者の確認方法
・サーバー側のSSL/TLSバージョンや設定のチェック手順
・よくあるトラブルとその対処法
進め方の注意点
説明は可能な限り具体例で示します。専門用語は最小限に抑え、実際の操作手順を中心に進めます。分からない用語があれば、いつでも質問してください。
SSL通信とは?なぜ確認が必要なのか
仕組みをやさしく説明
SSL(現在は主にTLSと呼ばれます)は、あなたのブラウザとWebサイトの間でやり取りする情報を暗号化する仕組みです。暗号化は手紙を封筒に入れるようなもので、第三者が中身を読めないようにします。さらに、サイトが正しい相手であることを証明する「証明書」も使います。これにより、なりすましや改ざんを防げます。
なぜ確認が必要なのか
サイトやサーバーの設定に不備があると、ブラウザが「保護されていない通信」と表示したり接続を拒否したりします。結果として利用者が離れ、個人情報やクレジットカード情報の漏えいリスクが高まります。運営側は定期的に確認して安全を保つ必要があります。
よくある問題と具体例
- 証明書の有効期限切れ:更新を忘れると警告が出ます。例)ログインフォームで警告が表示され利用者が入力をやめる。
- ドメインと証明書の不一致:wwwあり/なしやサブドメインで合わないとエラーになります。
- 古い暗号方式やプロトコル:古い設定だと解読されやすくなります。簡単に言えば、鍵が弱い状態です。
誰が・いつ確認するべきか
サイト管理者、開発者、運用担当者が対象です。証明書更新時、サーバー移行後、CDN導入時、またはセキュリティ監査の際に確認してください。日常的には自動更新と監視を併用すると安心です。
以上がSSL/TLSの基本と、確認が必要な理由です。具体的な確認手順は次章で丁寧に説明します。
WebサイトがSSL通信になっているかの基本的な確認方法
ブラウザのアドレスバーをまず確認
ブラウザのURLが「https://」で始まっているか確認します。たとえば「https://example.com」のようにsが付いていれば、基本的に暗号化された通信です。アドレスバーに鍵アイコンが表示されることも目印です。
鍵アイコンをクリックして接続情報を見る
鍵アイコンをクリックすると「安全な接続」や「接続は保護されています」などの表示が出ます。さらに詳しく知りたいときは表示内の「証明書」や「詳細を表示」を選びます。Chromeなら鍵→証明書を表示、Firefoxなら鍵→接続は保護されています→詳細で証明書情報を見られます。
証明書で確認する主な項目(簡単に)
- 有効期限:期限切れがないか確認します。
- 発行者:どの認証局が発行したかを確認します。
- 対象ドメイン:サイトのドメイン名と一致しているかを見ます(例:example.com, www.example.com)。
「保護されていない通信」と出たときに考えられる主な原因
- SSL証明書が未導入または設定ミス。
- 証明書の有効期限切れ。
- ページにHTTPの画像やスクリプトが混在している(ミックスコンテンツ)。
簡単な対処法としては、別のブラウザやプライベートウィンドウで確認する、ブラウザの表示から証明書の有効期限をチェックする、サイト管理者に連絡する、などが有効です。モバイルでは表示方法が異なる場合があるので、画面のサイト情報を確認してください。
サーバーやSSL/TLS通信のバージョン確認方法
概要
サーバーがどのTLSバージョンを受け入れているかは、接続テストで確かめます。ここではコマンドとブラウザ両方の手順を、具体例を交えてやさしく説明します。
opensslコマンドでの確認(基本)
例:TLS1.2で接続を試す
openssl s_client -connect example.com:443 -tls1_2 -servername example.com
TLS1.3で試す場合は -tls1_3 を使います。出力の中に「Protocol : TLSv1.2」や「Protocol : TLSv1.3」と表示されます。証明書情報は “Certificate chain” や証明書詳細で確認できます。証明書チェーン全部を見たいときは -showcerts を付けます。
ポイント:同じホストに複数のドメインが載っている場合は -servername オプションでSNIを指定してください。終了は Ctrl+C や入力の終了でできます。
OpenSSLのバージョン確認
古いOpenSSLだと -tls1_3 が使えないことがあります。確認は次のコマンドです。
openssl version
対応していない場合はローカル環境のOpenSSLを更新するか、別の方法で確認します。
nmapでのまとめ確認
サーバーがサポートするプロトコルや暗号を一覧で出すには nmap のスクリプトが便利です。
nmap --script ssl-enum-ciphers -p 443 example.com
一覧で比較的わかりやすく表示されます。
ブラウザでの確認(Chrome/Firefox)
- Chrome:DevTools を開き「Security」タブで接続情報を確認できます。ページの証明書や使われているプロトコル、暗号が見えます。Network タブの個別リクエストからも Security 情報を参照できます。
- Firefox:Developer Tools の Network パネルでリクエストを選び、Security(接続)情報を確認します。
注意点
- サーバー側は複数のバージョンを同時に許可することが多く、クライアント側と協議して最終的なバージョンが決まります。古いプロトコルが有効になっているとセキュリティリスクがあるため、必要に応じて無効化を検討してください。
SSL証明書の詳細確認・チェーン検証
概要
opensslコマンドでサーバ証明書と中間証明書(チェーン)を詳しく確認できます。ここでは実践的な手順と出力の見方を丁寧に説明します。
基本コマンドと意味
- サーバから証明書を取得: openssl s_client -connect example.com:443 -showcerts
- 複数の—–BEGIN CERTIFICATE—–ブロックが出力されれば中間証明書が送られています。
- 証明書の詳細表示: openssl x509 -in cert.pem -noout -text
- 有効期限(Not After)、発行者(Issuer)、サブジェクト(Subject)、SANを確認します。
実践手順
- s_clientで接続し、出力をファイルに保存します。例: openssl s_client -connect example.com:443 -showcerts > output.txt
- output.txtから個別の証明書を切り出してcert0.pem, cert1.pemと保存します。
- 各certN.pemをopenssl x509 -in certN.pem -noout -textで確認します。
チェーン検証
- ローカルでチェーンを検証する: openssl verify -CAfile chain.pem cert.pem
- chain.pemにはルート以外の中間証明書を順序どおりに並べます。正しく並んでいないと検証に失敗します。
ブラウザでの確認
ブラウザの証明書詳細画面でもSANや有効期限、発行者を確認できます。ブラウザはサーバが送る中間証明書の有無で警告を出すことがあります。
注意点
- 中間証明書が欠けると多くの環境で信頼されません。順序と有無を必ず確認してください。
- opensslの出力は冗長なため、必要な箇所を抜き出して確認すると分かりやすいです。
SSL通信のトラブルシューティング
※この章ではブラウザで「保護されていない通信」や証明書エラーが出たときの代表的な原因と、順を追った対処方法をわかりやすく説明します。
1) 主な原因
- SSL証明書が未導入、または期限切れ
- 中間証明書(チェーン)が未設定、または不完全
- サイト内にhttpの混在(ミックスコンテンツ)
- サーバーのTLS設定不備(SNI未設定、プロトコル制限など)
- クライアント側の時刻ズレやファイアウォールによる遮断
2) トラブルシューティング手順(優先度順)
- ブラウザの詳細表示でエラー内容を確認(証明書の発行者、期限、警告種別)
- 証明書の有効期限を確認:openssl x509 -in cert.pem -noout -dates
- チェーン確認:openssl s_client -connect example.com:443 -servername example.com で中間証明書の有無を確認
- ミックスコンテンツ確認:ブラウザ開発ツールのConsoleでhttpリソースを探す。見つかればhttpsに置換
- サーバー設定確認:Apacheやnginxではフルチェーン(fullchain.pem)を指定。SNIが必要な環境かも確認
- 必要なら証明書を再発行・更新し、サーバーを再起動。キャッシュやCDNがあれば同時に更新
3) よくある小さな落とし穴と対処
- 中間証明書を忘れる:発行元が配る「中間〜ルート」ファイルを結合して配置
- 異なるドメイン名で発行:ワイルドカードやSANの有無を確認
- クライアント時間が不正:サーバーや端末の時刻合わせを確認
4) 最終確認と外部ツール
- SSL Labs(Qualys)で総合診断、ブラウザで問題が残るか最終確認
簡潔に確認し、問題箇所を順に潰せば多くは解決します。必要であれば、具体的なサーバー種別(Apache/nginx)や環境情報を教えてください。
SSL通信確認のおすすめ手順まとめ
1. ブラウザでの初期チェック
まずアドレスバーに「https://」と鍵マークがあるか確認します。鍵マークをクリックすると証明書の発行先や有効期間が簡単に見られます。例: Chromeなら鍵マーク→「証明書」や「接続は保護されています」などの表示を確認。
2. 詳細は開発者ツールで確認
開発者ツール(F12)を開き、Securityタブで接続情報を見ます。証明書チェーンや使用中のプロトコル(TLS 1.2/1.3)を確認できます。ネットワークタブで混在コンテンツ(httpで読み込まれる画像やスクリプト)も探します。
3. サーバー側の技術的検証(openssl)
サーバーの応答や証明書の詳細はopensslコマンドで確認します。例: openssl s_client -connect example.com:443 -servername example.com で接続情報を取得。openssl x509 -in cert.pem -text で証明書内容を表示します。
4. エラーが出たときの優先チェック項目
- 証明書の有効期限
- ドメイン名の一致(Common Name/SAN)
- 証明書チェーンの欠落や順序不正
- ミックスコンテンツ(ページ内にhttpの読み込み)
- サーバー設定(プロトコルやポート)
5. 対処の順序(実務的な流れ)
1) ブラウザで簡易確認
2) 開発者ツールで原因切り分け(チェーン・混在コンテンツ)
3) opensslでサーバー応答と証明書詳細の確認
4) サーバー設定や証明書プロバイダーへ修正依頼
5) キャッシュやCDNのクリア、再確認
6. チェックリスト(短く使える)
- 鍵マークとhttpsの確認
- 証明書有効期限
- ドメイン名一致
- チェーンが揃っているか
- ミックスコンテンツがないか
- opensslで接続確認
各手順は簡潔に実行でき、原因を順に潰すことで解決に早く到達します。
SSL確認時によくあるQ&A
Q1: 証明書の有効期限はどこで確認できますか?
- ブラウザ:鍵マーク→証明書の表示で有効期限を確認できます。操作は直感的です。
- コマンド例:openssl x509 -noout -dates でファイルの有効期限を確認します。リモート接続なら openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates が便利です。
Q2: TLS1.2 / TLS1.3 が有効かどうかは?
- 確認方法:openssl s_client に -tls1_2 や -tls1_3 を付けて接続テストします(環境によっては -tls1_3 が無い場合があります)。
- 別の例:curl -v https://example.com を実行すると、使用したTLSバージョンが表示されます。
- サーバー設定:nginxなら conf の ssl_protocols、Apacheなら SSLProtocol の設定で制御します。
Q3: 証明書が期限切れだったらどうすれば良いですか?
- 新しい証明書を発行してサーバーに導入し、サービスを再起動します。Let’s Encrypt は自動更新が可能です。自己署名証明書の場合は警告が出るため、正規のCA発行証明書に切替えることをおすすめします。
Q4: チェーンや中間証明書の問題はどう確認しますか?
- openssl s_client -showcerts でサーバーが送る証明書チェーンを確認できます。オンラインの SSL Labs でも詳細チェックできます。
Q5: ブラウザで「安全ではない」表示や警告が出る主な原因は?
- 期限切れ、ホスト名不一致、自己署名、または中間証明書が欠けていることが多いです。ログやopenssl出力で原因を特定してください。
Q6: 接続できない・ハンドシェイクが失敗する場合の基本的な対処
- まずポート443が開いているか確認する。次にサーバーのTLS設定(プロトコル・暗号スイート)、SNI設定、ファイアウォールを順に確認します。curlやopensslの出力を手がかりにしてください。
よく使うコマンド(短く)
- openssl s_client -connect host:443 -servername host (接続と証明書表示)
- openssl x509 -noout -dates -in cert.pem (証明書の有効期限)
- curl -v https://host (使用TLSバージョンや証明書情報)
- nmap –script ssl-enum-ciphers -p 443 host (対応プロトコルや暗号の一覧)
困ったときは、まずブラウザ表示と一つのコマンド出力(opensslかcurl)を用意すると、原因特定が早くなります。












