SSL/TLS通信のテスト用に、Windows環境で自己署名証明書を作る必要があったので備忘録。
環境準備
OpenSSLのダウンロード
OpenSSL公式ページではGitHubへのリンクが貼られていて、Windowsで使うには自分でコンパイルする必要があるようです。
ここにあまり時間を割きたくなかったので、コンパイル済みのインストーラが配布されているサイトからダウンロードしました。
以下の Win32/Win64 OpenSSL のダウンロードページへ行きます。
ダウンロードページにはv3.0系列とv1.1.1系列があります。この記事ではv1.1.1で進めています。
<2022.5.10追記> v3.0系列は2021年9月にリリースされたメジャーバージョンアップになります。 v3.0でも、ほぼ同じインストール手順と全く同じコマンドで証明書発行できることを確認しましたが、v1.1.1もしっかり脆弱性対応等のアップデートはされているようなので、自己署名証明書を発行するだけであればv1.1.1でも問題ないと思います。
「Win64 OpenSSL v1.1.1* Light」の EXE か MSI のいずれかをダウンロードします。
(32bit環境の場合は「Win32 OpenSSL v1.1.1* Light」をダウンロードしてください。)
OpenSSLのインストール
ダウンロードしたインストーラファイルを管理者権限で実行します。
セットアップダイアログが表示されます。基本的に [Next] だけで問題ないと思います。
コマンドプロンプトからopensslコマンドが使えるようにパスを通す
Step 1
Windows + R キーで「ファイル名を指定して実行」ウィンドウを表示して、
sysdm.cpl と入力してEnterキーを押します。
Step 2
「システムのプロパティ」ウィンドウが開きます。
「詳細設定」タブ → 「環境変数」ボタン をクリックします。
Step 3
「環境変数」ウィンドウが開きます。
システム環境変数から、Pathを選び、ダブルクリックします。
Step 4
「環境変数名の編集」ウィンドウが開きます。
「新規」ボタンをクリックして、OpenSSLのインストール先、binフォルダへのパスを追加します。
デフォルトでは「C:\Program Files\OpenSSL-Win64\bin」になります。
追加が終わったら、ここまでで開いたウィンドウを全て「OK」ボタンを押して閉じます。
以上で、OpenSSLを使う準備が整いました。
自己署名証明書を発行する
下準備
作成する各種証明書ファイルを保存するための、作業フォルダを作成してください。
次に、コマンドプロンプトを「管理者として実行」して起動してください。以降の操作でコマンドからファイルを作成する際にアクセス権不足で失敗しないようにするためです。
作業フォルダに移動する
作業フォルダ「C:\SSL」に保存する場合について記載しています。保存先に合わせて変更してください。
C:\WINDOWS\system32> cd C:\SSL
C:\SSL>
秘密鍵(.key)を作成する [ RSA2048bit ]
server.key を作成します。
ここでは、RSA暗号方式の秘密鍵をランダム生成します。
以下のようにオプションを指定しない場合は、鍵長は自動で 2048bit になります。
C:\SSL> openssl genrsa -out server.key
Generating RSA private key, 2048 bit long modulus
..................+++++
..................................+++++
e is 65537 (0x010001)
証明書署名要求(.csr)を作成する [ SHA-256 ]
server.key から server.csr を作成します。
本来はここで作成する証明書署名要求を認証機関に提出して署名してもらうのですが、今回作るのは自己署名証明書なので、自分で要求して、自分で署名するイメージです。
ここでは、署名アルゴリズムとしてハッシュ関数 SHA-256を指定しています。
C:\SSL> openssl req -new -sha256 -key server.key -out server.csr
実行すると、所属やシステム名等を聞かれるのでそれぞれ設定します。
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:***.******.***
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
私は簡易的なテスト目的だったので、”Common Name” にサーバ名(FQDN)だけ設定し、他はブランクにしました。
自己署名証明書(.crt)を作成する [ X.509形式 ]
server.csr, server.key から server.crt を作成します。
ここでは、電子証明書として一般的なX.509形式を選択し、有効期間は10年( = 3650日 ) の証明書を作成しています。
C:\SSL> openssl x509 -req -in server.csr -signkey server.key -out server.crt -days 3650
Signature ok
subject=C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = ***.******.***
Getting Private key
個人情報交換ファイル(.pfx)を作成する [ PKCS#12形式 ]
server.key, server.crt から server.pfx を作成します。
秘密鍵と証明書が1つにまとまっていれば、サーバに設定する際に1ファイルのインポートで済んで便利ですね。まとめてしまいましょう。
ここでは、一般的によく使われるPKCS#12形式の個人情報交換ファイルを作成しています。秘密鍵と証明書(公開鍵が格納されている)をまとめているので、キーペアファイルとも呼ばれます。
C:\SSL> openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
実行するとパスワードを何にするか聞かれます。ここで設定したパスワードは、サーバアプリケーションに設定する際に必要となります。ブランクも可です。
Enter Export Password:
Verifying - Enter Export Password:
作成した証明書関連ファイルの確認
最終的に作業フォルダに4つのファイルができていればOKです。
作成されたファイルがそれぞれ何かをまとめると、次のようになります。
ファイル名 | ファイルの中身 |
---|---|
server.key | 秘密鍵(Private key) |
server.csr | 証明書署名要求(CSR; Certificate Signing Request) この中に公開鍵(Public key)も格納されています |
server.crt | X509形式の自己署名証明書 |
server.pfx | PKCS#12形式の個人情報交換(PFX; Personal Information Exchange) 証明書と秘密鍵の情報を1つにまとめたファイルで、サーバに証明書情報をインポートするときに使います |
証明書をサーバに設定する
利用するアプリケーションサーバのマニュアル等を参照し、設定手順に従って個人情報交換ファイルserver.pfxをインストール(インポート)してください。
以上です!
コメント