自作サーバ(XAMPP)でマルチドメインSSLを利用できるようにする。
通常、OpenSSL で作成する SSL証明書 は、ひとつのSubjectを持ち、ひとつのホスト名
に対してのみ有効です。
ですが、X509拡張のSAN(Subject Alternative Name)を使用すると、複数のホスト名に
対応させることができます。
自己署名証明書(Certificate)で複数ドメインをサポートするものです。
で、CSR を作成しないと行けなかったのですが、今までの CSR の作成方法では基本1つ
しかドメインを指定できないので、マルチドメインSSL の CSR作成手順を述べます。
環境はWindows Server 2016 で XAMPP の OpenSSLで、XAMPPにバンドルされている
openssl ではなく別途ダウンロードしてマルチドメインSSLの作り方を簡単に紹介です。
XAMPPのバージョンは8.0.0です。
Windows 用の OpenSSL を使って自己署名のサーバー証明書を作成する手順を紹介します。
32 ビット版の場合、ファイル名は openssl-*-i386-win32.zip
のようになっています。
2021/01/06日時点の最新バージョンは openssl-1.0.2u-i386-win32.zip
です。
今回はこのバージョン 1.0.2u で手順を紹介します。
適当な場所に openssl¥bin
というフォルダーを作成して、
そこにダウンロードした ZIP ファイルの中身を解凍します。
今回は C:¥openssl¥bin
に解凍しました。
フォルダーの階層や名前は自由に決めてもいいですが、最後のフォルダー名は 必ず bin
としてください。
C:¥opensll
ファイルを展開した場所 ( C:¥openssl
) に、
openssl.cnf
という名前のテキストファイルを作成する。
内容を以下の通りにします。
面倒な方は、以下のリンクからダウンロードできます。
openssl.cnf をダウンロードする。
######################################################################
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
######################################################################
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = JP
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Not Applicable
localityName = Locality Name (eg, city)
localityName_default = Not Applicable
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Apache Friends
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default =
commonName = Common Name (eg, your website’s domain name)
commonName_max = 64
######################################################################
[ server ]
nsCertType=server
extendedKeyUsage = serverAuth
######################################################################
[ SAN ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = site01.jp
DNS.2 = ajisai.mydns.jp
DNS.3 = localhost
# IP.1 = 192.168.1.15
####DNS.〇の順にマルチドメインを追記する。〇は数値
####※全てのDNS(Aレコード)の名前解決ができなければ全ての証明書発行が
#### できないので注意すること。
####IP.〇も同様の方法で記載可能
25 行目の Apache Friends は自分の組織名に書き換えてください。
subjectAltNameの詳細は https://kaede.jp/2018/06/10191854/ を参考にしました。
ファイルを展開した場所 ( C:¥openssl
) に、
OpenSSL_Console.bat
という名前のバッチファイルを作成する。
内容を以下の通りにします。
ファイルは以下のリンクからダウンロードできます。
OpenSSL_Console.bat をダウンロードする。
OpenSSL_Console.bat@ECHO OFF SET PATH=%~dp0bin;%PATH% SET OPENSSL_CONF=%~dp0openssl.cnf @openssl version %COMSPEC% /K "cd /d %~dp0"
ここまでの作業でフォルダーは以下のような構成になっています。
C:¥openssl
フォルダに必ず openssl.cnf
と OpenSSL_Console.bat
のファイルが
あることを確認してから OpenSSL_Console.bat をダブルクリックして起動する。
OpenSSL のバージョンが表示されれば成功です。
注意)
このままコマンドプロンプトは閉じないでください。
以下のコマンドを入力して秘密鍵(Private key = server.key)を作成します。
ここでは秘密鍵のファイル名を server.key としています。
server.key
ができました。 C:¥openssl¥server.key
)
Private key(server.key) と 先ほどの sample.cnf を使って CSR を作成します。
以下のコマンドを入力して証明書署名要求 (CSR) を作成します。
コンソールでの対話形式で作業を進めていきます。
既定値として openssl.cnf に記載した内容が表示されるので、
ほとんどの項目では Enter を押して進めていくことができます。
これでC:¥xampp¥apache¥conf¥ssl¥my-server.keyが生成されます。
適当な内容を入力します(以下黄色部分)。最後の2項目は必須ではないため入力不要です。
下記のコマンドを実行すると入力が求められるので適当な内容を入力します。( 以下 黄色部分 )
最後の2項目は必須ではないため入力不要です。
最後の Common Name については既定値が表示されません。
ここには実際に使用する ウェブサーバーのホスト名 を入力してください。
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) [JP]:(国コード)
State or Province Name (full name) [Not Applicable]:Fukuoka-Pref(都道府県名)
Locality Name (eg, city) [Not Applicable]:cyuou-ku(市区町村名)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Apache Friends(組織名)
Organizational Unit Name (eg, section) []:tonbo(組織内ユニット名)
Common Name (eg, your website's domain name) []:tonbo.example.com(アクセス名[http://アクセス名])
これで C:¥openssl¥server.crt
が生成されます。
[ SAN ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = site01.jp
DNS.2 = ajisai.mydns.jp
DNS.3 = localhost
以下のコマンドを入力してサーバー証明書を作成します。
引数 -days で有効期間 3650 日 ( 年/365日 : 約 10 年 ) を指定しています。
Loading 'screen' into random state - done
Signature ok
subject=/C=JP/ST=FukuokaL=cyuou-ku/O=Computer Planning/OU=tonbo/CN=exsample.ne.jp
上記の赤字が入力した結果です。(確認する。)
これで、サーバー証明書( C:¥openssl¥server.crt
) が生成されました。
以降で使用するファイルは server.key
と server.crt
のみです。
最後に作成した自己署名サーバー証明書を Apache に配置してみます。
XAMPP を使用している場合は、下記の フォルダーを開いて、
作成した server.crt と server.key を上書きコピーします。
c:¥xampp¥apache¥conf¥ssl.crt¥server.crt
c:¥xampp¥apache¥conf¥ssl.key¥server.key
これで Apache を再起動すれば、 サーバー証明書が有効になります。
c:¥xampp¥apache¥conf¥httpd.conf をテキスト ・ エディターで開いて以下の内容を編集します。
LoadModule ssl_module modules/mod_ssl.so がコメントアウトされている場合はコメントを外して有効化します。
Include conf/extra/httpd-ssl.conf がコメントアウトされている場合はコメントを外して有効化します。
(この行自体が存在しない場合は追記してください。)
c:¥xampp¥apache¥conf¥extra¥httpd-ssl.conf をテキスト ・ エディターで開いて以下の内容を編集します。
SSLCertificateFile "${SRVROOT}/conf/server.crt" がコメントアウトされている場合はコメントを外して有効化します。
ファイル名が異なっている場合は実際に配置したサーバー証明書のファイル名に合わせてください。
SSLCertificateKeyFile "${SRVROOT}/conf/server.key" がコメントアウトされている場合はコメントを外して有効化します。
ファイル名が異なっている場合は実際に配置したサーバー証明書のファイル名に合わせてください。
これでApacheを再起動すれば、作成した証明書が適用されます。
参考サイトは以下です。ありがとうございました。