SSL証明書をOpenSSLコマンドで取得するときにエラーが出る unable to get local issuer certificate
スポンサーリンク
このドキュメントの内容は、以下の通りです。
はじめに
インターネットでウェブサイトを閲覧するときに、ウェブブラウザを利用して、ウェブサーバと通信して、ウェブサーバから情報を取得して、ウェブブラウザで情報を表示しています。
このウェブブラウザとウェブサーバの通信では、HTTPプロトコルという約束ごとで通信が行われます。プライバシーや安全性の目的で、暗号化されたHTTPSが利用されています。HTTPSを利用することで、通信が暗号化され、通信経路において、通信の内容を誰かに見られたりすることがなくなるということです。
HTTPSの通信では、TLS で経路を暗号化し、その暗号化されたトンネルの中で HTTPプロトコルの通信が行われます。 TLS では、SSL証明書と呼ばれる電子証明書が利用され、サーバの真正性や暗号化の処理が行われます。
OpenSSL は、TLS や暗号化でよく利用されるライブラリやコマンドのソフトウェアです。OpenSSL は、世界中の Linux などの Unix で利用されています。今回の記事では、 OpenSSL コマンドのエラーについて紹介します。
TLSで何が行われるのか?
HTTPSの通信を行うときに、ウェブブラウザは、ウェブサーバとの間に、TLSのネゴシエーションを行います。そのときに、ウェブブラウザが動いているOSやウェブブラウザ自信が管理しているルート証明書のリストが利用されます。HTTPSに対応しているウェブサーバは、認証局によって発行された証明書を持っています。ウェブブラウザは、サーバからSSL証明書を受け取って、ルート証明書のリストを利用して、SSL証明書の検証を行います。サーバ証明書を発行した認証局の情報がルート証明書のリストにないときに、検証が失敗することになります。
OpenSSLコマンドのエラーについて
OpenSSLコマンドには、さまざまなオプションがあり、TLS通信のクライアントとして利用したり、ファイルの暗号化や復号化などを行うことができます。OpenSSLはウェブブラウザではありませんが、HTTPSに対応しているウェブサーバ(TLSサーバ)に接続して、リクエストを送信し、レスポンスを受け取ることができます。
ウェブサーバのTLSについて確認を行いたいときに、OpenSSL コマンドを利用して、ウェブサーバのTLSに関する情報を取得するといった使い方をすることがあります。
さて、今回の例では、OpenSSLコマンドでSSL証明書を取得するときに以下のエラーが出ました。
% openssl s_client -connect login.yahoo.co.jp:443 -showcerts >/tmp/login depth=1 /C=JP/O=Betrusted Japan Co., Ltd./CN=Cybertrust Japan Public CA verify error:num=20:unable to get local issuer certificate verify return:0 read:errno=0
証明書を発行した認証局(CA)のルート証明書が、 OpenSSL コマンドが参照しているルート証明書のリストに存在してないから、上記のエラーが出たと考えられます。
場合によっては、中間認証局の証明書がなくて、エラーになるケースも考えられます。
証明書を発行する場合、中間認証局から発行されていたり、複数の中間認証局が使われていることもありますが、中間認証局の証明書は、ウェブサーバ側から配信することで、クライアント側に中間認証局の証明書がなくても、エラーにならずに通信できます。
エラーの対処方法
このエラーの対処方法は、以下の方法があると考えられます。
- ルート証明書のファイルをOpenSSLコマンドに指示する
- 認証局の証明書をルート証明書のリストに追加する
FreeBSD の場合は、 [2011-01-27-1] の ca_root_nss でインストールされるルート証明書を指定することで、エラーは発生しなくなります。
OpenSSLコマンドにルート証明書のリストを指定する方法
openssl コマンドにルート証明書のリストを指定して実行する場合には、 -CAfile オプションを利用します。
コマンドラインは以下の通りです。 /path/to/root-ca.crt は、任意のパスに変更してください。
openssl s_client -CAfile /path/to/root-ca.crt -connect fqdn:443 -showcerts
ルート証明書のリストは、OSによってファイルのパスが異なります。
ここでは、 FreeBSDや Linuxの Ubuntu や CentOS を例に挙げます。
Ubuntu の場合は、 ca-certificates のパッケージをインストールした状態で、 /etc/ssl/certs/ca-certificates.crt を利用すればよいでしょう。
/etc/ssl/certs/ca-certificates.crt
CentOS の場合は ca-certificates のパッケージをインストールします。
以下の crt を利用すればよいでしょう。
/etc/pki/tls/certs/ca-bundle.crt
下記は FreeBSD の場合の例になります。
FreeBSD には、 ca_root_nss というパッケージが提供されています。このパッケージをインストールすることで、 ルート証明書のリストがインストールされます。
% openssl s_client -CAfile /usr/local/share/certs/ca-root-nss.crt -connect login.yahoo.co.jp:443 -showcerts > /tmp/login depth=2 /C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root verify return:1 depth=1 /C=JP/O=Cybertrust Japan Co., Ltd./CN=Cybertrust Japan Public CA G1 verify return:1 depth=0 /C=JP/ST=Tokyo/L=Minato-ku/O=Yahoo Japan Corporation/OU=l07.login.kks.2010/CN=login.yahoo.co.jp verify return:1 read:errno=0
参考
ca_root_nss については、 [2007-12-18-2] をご参照ください。
参照しているページ (サイト内): [2011-01-27-1]
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12