IISマネージャで作成する自己署名証明書の有効期限は、1年です。
変更時、サービスの再起動を伴う他、クライアント証明書の変更もしなくてはなりません。
手間がかかりますし、何より更新を忘れてしまい接続できないトラブルに苛まれることも少なくありません。
インターネットに公開するサーバであれば、正規の証明書を設定しますが
ローカルネットワーク内のみ公開するのであれば、自己署名証明書を設定することがあります。
自己署名証明書とは、公開鍵を対になる自身の秘密鍵で署名した証明書のことで、
何の保証にもなっていない証明書です。
そのため、ローカルネットワーク内の場合、認証局に申請したりと手間な工程をしなくともよい、自己署名証明書(オレオレ証明書)が使われます。
今回は、OpenSSLを使用して実質無期限(数百年)の
自己署名証明書を作成する方法とIISでの検証について記します。
無期限の自己署名証明書を作成
前提
- OpenSSLインストール済み
※最新のライブラリ - 公開鍵暗号方式 : RSA
- 秘密鍵長 : 2048bit
私は、CentOSで作成をしました。
※Macのターミナルからも作成できます。
秘密鍵の作成
まずは、秘密鍵を作成します。
鍵長を2048bitとして作成しました。
ファイル名を「server.key」としました。
openssl genrsa 2048 > server.key
CSR(証明書署名要求)の作成
CSRとは、認証局に、証明書への署名を申請するメッセージです。
なお、自己署名証明書のため、認証局も自分自身です。
先ほど作成した秘密鍵を用いてCSRを作成します。
openssl req -new -key server.key > server.csr
上のコマンドを入力すると、サーバ情報の入力が求められます。
コモンネームは、証明書を利用するドメインを入力します。
要件にもよりますが、基本コモンネーム、Country Name以外はスルーして作成も問題ないでしょう。
コモンネームをワイルドカード指定(*)をすれば、ワイルドカード証明書となります。
サーバ証明書の作成
crt(サーバ証明書)とcsrとは同時に作成が可能ですが、
今回は別々に作成しました。
※下記コマンドを実行する前に、san.txtの作成が必要です。(後述)
openssl x509 -in server.csr -req -out server.crt -days 36500 -signkey server.key -sha256 -extfile san.txt
CSRに自己署名をして証明書を作成します。
x509とは、公開鍵証明書の標準フォーマットのことです。
今回は、拡張を使用するためv3となっています。
dayは、実質無期限の36500日(100年)としました。
ハッシュ関数は、sha256としました。
X509拡張のSAN(Subject Alternative Name)を使用すると複数のホスト名を対応させることができますが、
この拡張がChrome 58以降では必要です。
Chrome58以降は、CommonNameを評価せずSANで評価されるようになりました。
SAN情報がない場合、「NET::ERR_CERT_COMMON_NAME_INVALID」、「サブジェクトの代替名がありません」、「この接続ではプライバシーが保護されません」というエラーメッセージが表示されます。
そのためにSAN情報を記述したファイルをextfileで指定します。
san.txtの作成
サーバ証明書を上のコマンドで実行するには、
発行した秘密鍵等と同じフォルダ配下にsan.txtを作成します。
subjectAltName = DNS:sample.com
「sample」のところに使用するドメインを入力します。
ワイルドカード指定や、IPアドレス指定も可能です。
複数入力する場合は、コンマ「,」区切りにします。
DNS:*.sample.com,IP:192.168.1.10
これでサーバ証明書の作成は完了しました。
続いてIISで使用できるようにします。
PKCS#12に変換
Public Key Cryptography Standard#12の略です。
公開鍵証明書および秘密鍵をパスワードベースの対象鍵で保護し、安全に保存または転送するために使用されるファイル形式です。
今回、OpenSSLで作成した証明書は、PEM形式です。
これをMicrosoft IISが対応しているPKCS#12(pfx)形式に変換する必要があります。
openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
なお、上記コマンドを実行すると、パスワード登録が求められますので入力をします。
サーバにインポートする際に必要になります。
Windows IISにpfxファイルを送る
続いて、作成したpfxファイルをWindowsに送ります。
GUIがあれば、それぞれの方法で送ってください。
本事項は一例です。
PUTTYを使用してSSH(22)でデータを送ります。
Windowsでcmdを開いてください。
任意のフォルダに移動します。
puttyの実行ファイルがあるフォルダにある、pscp.exeを使用して
データを受信します。
pscp.exe -P 22 -r root@IPアドレス:/作成した証明書フォルダパス データを受け取るパス
これで、pfxファイルを受け取ることができました。
では、次の記事で実際に動作するかを検証します。
ありがとうございます。
補足
・フレンドリーネームを使用する際は、nameオプションを追加で作成できます。
・フレンドリーネームや用途の限定については、Windowsの証明書プロパティから変更できます。(次回のIIS検証記事で記します。)
コメント