はじめに
SSL設定に挑戦。
以前もやったが上手くいかなかったのでリトライ。
今回は上手くいった。
OS: CentOS7 (さくらVPS)
Apache: 2.4系
SSL証明書: さくらインターネットの一番安いやつ
方法
秘密鍵の生成
$ openssl genrsa -des3 -out private.key 2048
# Generating RSA private key, 2048 bit long modulus
# ...........................+++
# ..............................................................................................# ................................+++
# e is 65537 (0x10001)
# Enter pass phrase for private.key: *******************(ここに入力したものを絶対わすれちゃダメ)
# Verifying - Enter pass phrase for private.key: *******************
CSRの生成
$ openssl req -new -key private.key -out server.csr
# Enter pass phrase for private.key: *******************(秘密鍵のパスフレーズ)
# 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) [XX]:JP
# State or Province Name (full name) []:Tokyo
# Locality Name (eg, city) [Default City]:Kita-Ku
# Organization Name (eg, company) [Default Company Ltd]:組織名を何か
# Organizational Unit Name (eg, section) []:(任意)
# Common Name (eg, your name or your server's hostname) []:http://example.comなら「example.com」
# Email Address []:(未入力)
# Please enter the following 'extra' attributes
# to be sent with your certificate request
# A challenge password []:(未入力)
# An optional company name []:(未入力)
できたファイル
$ -rw-rw-r-- 1 sample sample 1743 4月 28 08:54 private.key
$ -rw-rw-r-- 1 sample sample 980 4月 28 08:58 server.csr
CSRの中身
$ cat server.csr
# -----BEGIN CERTIFICATE REQUEST-----
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# -----END CERTIFICATE REQUEST-----
SSL証明書の申し込み
しばらくするとメールで準備できたとメールが来るので
認証ファイルDL
を押してtxtファイルをダウンロードする。
サーバ証明書の設定
$ cd [ドキュメントルート]
$ sudo mkdir -p .well-known/pki-validation
# このディレクトリ以下にダウンロードしたファイルを入れる
アクセス制限をかけてると認証できないらしいので、ベーシック認証などを外す必要がある。
暫く待つと、サーバ証明書DL
が現れる。
ダウンロードしたサーバ証明書をサーバーに転送する。
$ scp server.crt [ユーザー名]@[IPアドレス]:[ディレクトリ]
中間CA証明書の設定
ダウンロードしたサーバ証明書に中間CA証明書情報を記載する必要がある。
今回取得したSSL証明書の中間証明書はJPRSから取得する。
中間証明書は取得したSSL証明書によって違うので上記にすればよいというわけではない。
server.crt
を開き、以下のように設定する。
-----BEGIN CERTIFICATE-----
(サーバ証明書)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE----- ⇐ ここから下を追加する
(中間証明書)
-----END CERTIFICATE-----
Apacheの設定
バーチャルホストの設定
<VirtualHost *:443>
(省略)
SSLEngine on
SSLCertificateFile server.crt (ダウンロードしたサーバ証明書)
SSLCertificateKeyFile private.key (CSR生成時の秘密鍵)
(省略)
</VirtualHost>
SSLモジュールの設定
$ sudo yum install mod_ssl
$ sudo vim /etc/httpd/conf.modules.d/00-ssl.conf
# 以下を記載する
# LoadModule ssl_module modules/mod_ssl.so
$ sudo systemctl restart httpd
443ポートの開放
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload