OpenSSL Ver.1.1.1は既にサポートが終了しています。サポート中のOpenSSL Ver.3については、Tech TIPS「【Windows 10/11】WindowsにOpenSSL Ver.3をインストールして証明書を取り扱う」を参照してください。
ここまでの手順だけでは、openssl.exeの実行時に「unable to get local issuer certificate」といったエラーが生じることがある。以下は、SSL/TLSのサーバにアクセスして証明書を検証・取得するコマンド「s_client」の実行例だ。
これは、ローカル上でルート認証局(Root Certificate Authority、ルートCA)の証明書が見つからない、ということを示している。
OpenSSLに限らず、証明書が正しいものかどうかを検証する過程では、ルート認証局(Root Certificate Authority、ルートCA)の証明書が必要になる。これは一般的に、検証中に(リモートのサイトではなく)ローカルPC上で参照できる必要がある。
Windows OSでもルートCAの証明書はローカルPCに保存されている。証明書管理ツール「certmgr.msc」「certlm.msc」で表示できる「証明書ストア」の[信頼されたルート証明機関]−[証明書]などに格納されているのが、ルートCAの証明書だ。
しかしOpenSSLはこのWindows OS標準の証明書ストアを参照せず、かつ配布されているOpenSSLのインストーラーにもルートCAの証明書は含まれていない。そのため、別途ルートCA証明書を用意する必要がある。
例えば、指定したURLのサイトからデータをダウンロードするコマンドラインツール「curl」の配布元サイトでは、「cacert.pem」という名前でルートCA証明書ファイルを提供している。
このWebページの冒頭にある「cacert.pem」というリンクをクリックすると、このファイルがダウンロードできる。それを適当なフォルダに保存しておき、openssl.exeを実行する際に、その在りかをオプションで指定すればよい。例えば前述の「s_client」コマンドの場合、「-CAfile <cacert.pemのフルパス>」というオプションを指定する。
なお、社内プライベートCAがある環境では、そのルートCA証明書をPEM形式で上記のcacert.pemに追記する必要がある。
openssl.exeの基本的な書式は次の通りだ。
openssl <コマンド> <オプションパラメーター>
この<コマンド>だけでも数十個あり、付随するオプションも多数存在する。以下では、証明書に関わる基本的な書式の例を挙げるだけに止めておく。
以下のコマンドラインを実行すると、「www.example.jp」という共通名(Common Name)の証明書要求が生成され、「www_example_jp.csr」というファイルに保存される。同時にその秘密鍵も「www_example_jp.key」に保存される。
openssl req -new -newkey rsa:2048 -nodes -out www_example_jp.csr -keyout www_example_jp.key -sha256 -subj "/C=JP/ST=Tokyo/L=Setagaya-ku/O=Example Corp./OU=System Management Division/DC=example/DC=jp/CN=www.example.jp"
以下のコマンドラインを実行すると、PKCS12形式の証明書ファイル「example.pfx」からPEM形式の証明書ファイル「example.pem」が変換・生成される。example.pemには、暗号化されていない秘密鍵とルート証明書、中間証明書、サーバ証明書など一式が含まれる。
openssl pkcs12 -in example.pfx -nodes -out example.pem -info
PEM形式へ変換する方法については、TIPS「Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする」を参照していただきたい。
OpenSSLでは、コマンドラインで指定するオプションの他、設定ファイル「openssl.cnf」でも各種指定ができる。このファイルの在りかは、次のコマンドを実行して表示される「OPENSSLDIR」で確認できる。デフォルトは「%CommonProgramFiles%\SSL」フォルダだ。
openssl version -a
このパスは環境変数「OPENSSL_CONF」で指定することで変更可能だ。
注意すべきは、コマンドラインオプションとopenssl.cnfのどちらか一方でしか指定できない設定項目があることだ。例えば証明書の発行に利用するCAの詳細についてはopenssl.cnf、証明書の検証時に参照するローカルのルートCA証明書ファイル(単体)についてはコマンドラインオプション(-CAfile)で、それぞれ指定する必要がある。
また、デフォルトのopenssl.cnfは改行コードが(Windows標準の)CRLFではなくLFになっているせいで、古いWindows OSのメモ帳では正しく編集できないことがある。その場合は秀丸エディタやVisual Studio Codeなど、LFの改行コードに対応したテキストエディタで編集していただきたい。
OpenSSLではしばしば脆弱(ぜいじゃく)性が発覚し、更新版がリリースされることがよくある。
上記の手順でWindows OSにインストールしたOpenSSLについても、脆弱性が解消された更新版がリリースされたら、速やかに更新すべきだ。
それには、単に更新版のインストーラーを実行して再インストールすればよい。自動的に旧版を上書きする形でアップグレードが行われる。
ただし、カスタマイズしたopenssl.cnfも上書きされてしまうので、必要なら事前にバックアップしておき、アップグレード後、カスタマイズした箇所を新たなopenssl.cnfに書き戻す必要がある。
■この記事と関連性の高い別の記事
■更新履歴
【2022/04/13】Windows 11およびOpenSSL Ver. 1.1.1に対応しました。Visual C++再配布パッケージのインストール手順を追記しました。
【2018/05/16】OpenSSL Ver. 1.0.2/1.1.0およびWindows 10の情報を反映しました。スクリーンショットを一新しました。CA証明書の取り扱いについて追記しました。
【2016/01/29】初版公開。
Copyright© Digital Advantage Corp. All Rights Reserved.