SSLエラーで一部の環境のみ表示されない原因と対応

掲載日

結論

ブラウザによってWebサイトへアクセスできたりできなかったりしており、アクセスできない場合はブラウザの鍵マークが赤くなっている場合、中間証明書に問題があるかもしれません。
有効期限が切れている場合は再発行してサービス再起動を行いましょう。

調査方法

まず以下のコマンドで中間証明書がどうなっているか確認します。

[XXXX]# openssl s_client -connect [問題の起きているサイトのドメイン]:443 -showcerts
 Connecting to XXX.XXX.XXX.XXX
CONNECTED(00000003)
depth=0 CN=[問題の起きているサイトのドメイン]
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN=[問題の起きているサイトのドメイン]
verify error:num=21:unable to verify the first certificate
verify return:1
depth=0 CN=[問題の起きているサイトのドメイン]
verify return:1
---
Certificate chain
 ... (以下省略) ...

以下のように、verify errorが出ている場合問題があります。

depth=0 CN=[問題の起きているサイトのドメイン]
verify error:num=20:unable to get local issuer certificate

※ 問題が無い場合は以下のようなログが表示されます。

[XXXX]# openssl s_client -connect example.com:443 -showcerts
Connecting to 172.66.147.243
CONNECTED(00000003)
depth=3 C=US, O=SSL Corporation, CN=SSL.com TLS ECC Root CA 2022
verify return:1
depth=2 C=US, O=SSL Corporation, CN=SSL.com TLS Transit ECC CA R2
verify return:1
depth=1 C=US, O=SSL Corporation, CN=Cloudflare TLS Issuing ECC CA 3
verify return:1
depth=0 CN=example.com
verify return:1
---
Certificate chain
 ... (以下省略) ...

問題があった場合、サーバーにssh等で接続して、以下を調べます。

  • そもそもちゃんと証明書類が配置されているか。
  • Apache, Nginx等の設定は問題無いか。(証明書を示しているパスをlsコマンドで引いてこれるか確認など。)
  • 証明書の有効期限は問題無いか。(以下のコマンドを実行して調べられます。)
[XXXX]# openssl x509 -enddate -noout -in  /[証明書配置しているパス]/XXX.crt
notAfter=Jan 1 23:59:59 2027 GMT
[XXXX]# openssl x509 -enddate -noout -in /[証明書配置しているパス]/XXX.ca
notAfter=Jan 1 23:59:59 2025 GMT <= ここの日付が現在時刻より前になっていないか。
  • その他

 

自分の場合はコマンド例のように、サーバー証明書は有効期限が切れていないけど、中間証明書の方の有効期限が過ぎてしまっているという状態でした。

経緯

仕事で公開しているWebサイトで、「端末によってサイトにアクセス出来たり出来なかったりする。エラーの時はブラウザのURL欄左の鍵マークの所が赤くなっている。」という問い合わせがありました。
証明書の更新忘れていて古くなっている?と慌てて調べたところ自分のPCでは正常にアクセス出来たし、証明書の有効期限も過ぎておらずという状態に。

とはいえブラウザの鍵マークが赤くなっているからには証明書関連のエラーだと思われるので、上記の方法で調査したところ中間証明書だけ有効期限が切れていたということでした。

最新のブラウザ等では中間証明書が無くても問題なくアクセス出来てしまうようで、端末によって差が出る結果になってしまい、気が付くのが遅れてしまいました。

 

証明書関係は今後期日の短縮などもあり、中々手動ではチェックの手が回らないので、opensslコマンド使って自動でチェックを回す等するのが良いかもしれません。

記事の作成者のA.W.のアイコン

この記事を書いた人

A.W.
茨城県在住Webエンジニアです。 PHP、PostgreSQL、Linuxなどを業務で使用しています。 趣味ではGoやNuxt、Flutterをやってます。

Comment

関連記事

check コピーしました!