自己署名SSLサーバ証明書の作成

自己署名のSSLサーバ証明書を作成する方法です。

ファイル名等やフォルダのパス等は任意です。この通りでなくても結構です。
ここでは、以下のようにします。
WEBサイトドメイン www.example.jp
Apacheインストールフォルダ /etc/httpd
Apache SSL用設定ファイル /etc/httpd/conf.d/ssl.conf
SSL証明書ファイル保存フォルダ /etc/httpd/certs
サーバ用秘密鍵 www.example.jp.privkey.pem
サービス起動用秘密鍵 www.example.jp.privkey_nopwd.pem
CSR(署名要求) www.example.jp.csr.pem
サーバ証明書 www.example.jp.cert.pem
CA用秘密鍵 www.example.jp.ca.privkey.pem
CA用証明書 www.example.jp.ca.cert.pem

1. 準備作業

(1) mod_sslのインストール
mod_sslがインストールされているかどうかチェックします。
# rpm -qi mod_ssl
ここで、mod_sslのインストール情報が表示されれば「mod_ssl」はインストール済みなのでこの項目はスキップして下さい。
「パッケージ mod_ssl はインストールされていません。」というようなメッセージが表示されればインストールを行います。
# yum install mod_ssl

(2) 乱数データファイルの作成
鍵の作成時に使用する乱数データファイルを作成します。
ここでは、ファイル名を「rand.dat」とします。
# openssl dgst -md5 /usr/bin/* > /etc/httpd/certs/rand.dat
※ここでは「/usr/bin」以下のファイル名を使用して乱数を生成していますが、フォルダのパスは任意で構いません。

2. サーバ用秘密鍵の作成

サーバ用秘密鍵は、RSA鍵を生成し、暗号化アルゴリズムはDES3、鍵長2048ビットを指定します。
# cd /etc/httpd/certs
# openssl genrsa -des3 -out www.example.jp.privkey.pem -rand rand.dat 2048

処理の途中でサーバ用パスフレーズの入力が求められるので、任意のパスフレーズを入力します。
Enter pass phrase for server.key : (パスフレーズ)
Verifying pass phrase for server.key :(パスフレーズの再入力)

3. CSRの作成

サーバ証明書を発行するためのCSR(署名要求)ファイルを作成します。
# cd /etc/httpd/certs
# openssl req -new -key www.example.jp.privkey.pem -out www.example.jp.csr.pem -days 365 -sha256
※ここではハッシュアルゴリズムを「sha-256」で作成しています。「sha-1」で作成する場合には「-sha256」を削除して実行して下さい。
※opensslのバージョンが「1.0.0」未満の場合には「-sha256」オプションは使用できません。

処理の途中でサーバ用パスフレーズの入力が求められるので、サーバ用秘密鍵のパスフレーズを入力します。
Enter pass phrase for server.key : (パスフレーズ)

続いて、証明書の情報を入力します。
【国コード】
Country Name (2 letter code) [AU]:JP
【都道府県名】
State or Province Name (full name) [Some-State]:Tokyo 
【市区町村名】
Locality Name (eg, city) []:Minato-ku
【組織名称】
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Inc.
【所属名称】
Organizational Unit Name (eg, section) []:IT Group
【サーバ名(FQDN)】
Common Name (eg, YOUR name) []:www.example.jp
【管理者Email】
Email Address []:
この後、パスワードおよび会社名称の入力を求められますが、[Enter]を押して空白とします。
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

4. サーバ証明書の作成

サーバ証明書を作成します。
# cd /etc/httpd/certs
# openssl x509 -sha256 -in www.example.jp.csr.pem -out www.example.jp.cert.pem -req -signkey www.example.jp.privkey.pem -days 365
※ここでは署名アルゴリズムを「sha-256」で作成しています。「sha-1」で作成する場合には「-sha256」を削除して実行して下さい。
※opensslのバージョンが「1.0.0」未満の場合には「-sha-256」オプションは使用できません。

処理の途中でサーバ用パスフレーズの入力が求められるので、サーバ用秘密鍵のパスフレーズを入力します。
Enter pass phrase for server.key : (パスフレーズ)

5. サービス起動用秘密鍵の作成

2.で作成したサーバ用秘密鍵のままhttpdを起動させると、起動するたびにパスフレーズの入力が必要となり、自動起動できなくなりますので、秘密鍵からパスフレーズを削除します。
# cd /etc/httpd/certs
# openssl rsa -in www.example.jp.privkey.pem -out www.example.jp.privkey_nopwd.pem

処理の途中でサーバ用パスフレーズの入力が求められるので、サーバ用秘密鍵のパスフレーズを入力します。
Enter pass phrase for server.key : (パスフレーズ)

6. CA(自己署名認証局)用秘密鍵の作成

ここで自己署名の認証局用の秘密鍵を作成します。
この秘密鍵のパスフレーズは、必ずサーバ用秘密鍵のパスフレーズと異なるものを設定して下さい。
# cd /etc/httpd/certs
# openssl genrsa -des3 -out www.example.jp.ca.privkey.pem -rand rand.dat 2048

処理の途中でCA用パスフレーズの入力が求められるので、任意のパスフレーズを入力します。
Enter pass phrase for ca.key : (パスフレーズ)
Verifying pass phrase for ca.key :(パスフレーズの再入力)

7. CA用証明書の作成

# cd /etc/httpd/certs
# openssl req -new -x509 -sha256 -days 365 -key www.example.jp.ca.privkey.pem -out www.example.jp.ca.cert.pem
※ここでは署名アルゴリズムを「sha-256」で作成しています。「sha-1」で作成する場合には「-sha256」を削除して実行して下さい。

処理の途中でCA用パスフレーズの入力が求められるので、CA用秘密鍵のパスフレーズを入力します。
Enter pass phrase for ca.key : (パスフレーズ)

続いて、証明書の情報を入力します。
【国コード】
Country Name (2 letter code) [AU]:JP
【都道府県名】
State or Province Name (full name) [Some-State]:Tokyo 
【市区町村名】
Locality Name (eg, city) []:Minato-ku
【組織名称】
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Inc.
【所属名称】
Organizational Unit Name (eg, section) []:IT Group
【サーバ名(FQDN)】
Common Name (eg, YOUR name) []:www.example.jp
【管理者Email】
Email Address []:

8. フォルダのアクセス権の設定

秘密鍵や証明書のファイルに、root以外からアクセスできないようにフォルダにアクセス権を設定します。
# chmod -R 400 /etc/httpd/certs

9. Apacheでの設定

SSL設定ファイル「/etc/httpd/conf.d/ssl.conf」に作成したファイル名を記述します。
# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/certs/www.example.jp.cert.pem
SSLCertificateKeyFile /etc/httpd/certs/www.example.jp.privkey_nopwd.pem
SSLCACertificateFile /etc/httpd/certs/www.example.ca.cert.pem

Apacheにおいて、エラーがないかチェックをします。
# /usr/sbin/apachectl configtest
ここで、「Syntax OK」と表示されればOKです。
エラーが表示された場合には、エラーの原因を修正して下さい。

設定が完了したら、Apacheを再起動します。
/usr/sbin/apachectl restart



最終更新:2015年02月20日 16:45