【Windows 11対応】WindowsにOpenSSLをインストールして証明書を取り扱う(Ver. 1.1.1編)Tech TIPS(2/2 ページ)

» 2022年04月13日 05時00分 公開
[島田広道デジタルアドバンテージ]
前のページへ 1|2       

OpenSSL Ver.1.1.1は既にサポートが終了しています。サポート中のOpenSSL Ver.3については、Tech TIPS「【Windows 10/11】WindowsにOpenSSL Ver.3をインストールして証明書を取り扱う」を参照してください。


OpenSSL用に認証局(CA)の証明書ファイルを用意する

 ここまでの手順だけでは、openssl.exeの実行時に「unable to get local issuer certificate」といったエラーが生じることがある。以下は、SSL/TLSのサーバにアクセスして証明書を検証・取得するコマンド「s_client」の実行例だ。

ルートCA証明書を用意していない場合に生じるopenssl.exeのエラーの例 ルートCA証明書を用意していない場合に生じるopenssl.exeのエラーの例

 これは、ローカル上でルート認証局(Root Certificate Authority、ルートCA)の証明書が見つからない、ということを示している。

●「unable to get local issuer certificate」というエラーが生じる理由

 OpenSSLに限らず、証明書が正しいものかどうかを検証する過程では、ルート認証局(Root Certificate Authority、ルートCA)の証明書が必要になる。これは一般的に、検証中に(リモートのサイトではなく)ローカルPC上で参照できる必要がある。

 Windows OSでもルートCAの証明書はローカルPCに保存されている。証明書管理ツール「certmgr.msc」「certlm.msc」で表示できる「証明書ストア」の[信頼されたルート証明機関]−[証明書]などに格納されているのが、ルートCAの証明書だ。

 しかしOpenSSLはこのWindows OS標準の証明書ストアを参照せず、かつ配布されているOpenSSLのインストーラーにもルートCAの証明書は含まれていない。そのため、別途ルートCA証明書を用意する必要がある。

●配布されているルートCA証明書ファイルを入手する

 例えば、指定したURLのサイトからデータをダウンロードするコマンドラインツール「curl」の配布元サイトでは、「cacert.pem」という名前でルートCA証明書ファイルを提供している。

 このWebページの冒頭にある「cacert.pem」というリンクをクリックすると、このファイルがダウンロードできる。それを適当なフォルダに保存しておき、openssl.exeを実行する際に、その在りかをオプションで指定すればよい。例えば前述の「s_client」コマンドの場合、「-CAfile <cacert.pemのフルパス>」というオプションを指定する。

用意したCA証明書を指定してopenssl.exeを実行したときの例 用意したCA証明書を指定してopenssl.exeを実行したときの例

 なお、社内プライベートCAがある環境では、そのルートCA証明書をPEM形式で上記のcacert.pemに追記する必要がある。

openssl.exeの基本的な使い方

 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"



OpenSSLで証明書の要求を作成する OpenSSLで証明書の要求を作成する

●証明書の形式を変換する

 以下のコマンドラインを実行すると、PKCS12形式の証明書ファイル「example.pfx」からPEM形式の証明書ファイル「example.pem」が変換・生成される。example.pemには、暗号化されていない秘密鍵とルート証明書、中間証明書、サーバ証明書など一式が含まれる。

openssl pkcs12 -in example.pfx -nodes -out example.pem -info



OpenSSLで証明書の形式を変換する OpenSSLで証明書の形式を変換する

 PEM形式へ変換する方法については、TIPS「Windows上で、証明書や秘密鍵をPEM形式に変換してエクスポートする」を参照していただきたい。

設定ファイル「openssl.cnf」の編集・修正が必要な場合も

 OpenSSLでは、コマンドラインで指定するオプションの他、設定ファイル「openssl.cnf」でも各種指定ができる。このファイルの在りかは、次のコマンドを実行して表示される「OPENSSLDIR」で確認できる。デフォルトは「%CommonProgramFiles%\SSL」フォルダだ。

openssl version -a



設定ファイル「openssl.cnf」の在りかを確認する 設定ファイル「openssl.cnf」の在りかを確認する

 このパスは環境変数「OPENSSL_CONF」で指定することで変更可能だ。

 注意すべきは、コマンドラインオプションとopenssl.cnfのどちらか一方でしか指定できない設定項目があることだ。例えば証明書の発行に利用するCAの詳細についてはopenssl.cnf、証明書の検証時に参照するローカルのルートCA証明書ファイル(単体)についてはコマンドラインオプション(-CAfile)で、それぞれ指定する必要がある。

 また、デフォルトのopenssl.cnfは改行コードが(Windows標準の)CRLFではなくLFになっているせいで、古いWindows OSのメモ帳では正しく編集できないことがある。その場合は秀丸エディタやVisual Studio Codeなど、LFの改行コードに対応したテキストエディタで編集していただきたい。

OpenSSLの脆弱(ぜいじゃく)性に要注意!

 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】初版公開。


「Tech TIPS」のインデックス

Tech TIPS

前のページへ 1|2       

Copyright© Digital Advantage Corp. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。