ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
以前格安証明書を使ったSSL化について記事を書きましたが早いものでもう1年が経とうとしています。
本日はSSL証明書の更新の仕方について説明しておきたいと思います。
証明書発行機関は沢山ありますが私はFujiSSL(https://www.ssl-store.jp/fujissl/)が年額1,080円と群を抜いて安いかったためこちらを利用しています。
全体の流れは以下の通りです。
この記事のもくじ
FujiSSLで実施すること
デポジット
会員サイトにログインし、「証明書」→「証明書購入」を選択します。
今回はSSL証明書を1年更新しますので、「更新」ボタンを押下します。
するとデポジット残高が不足しているとワーニングが出ますので「デポジットをチャージ」ボタンを押下します。
購入
これでSSL種別が「Fuji-SSL-RN」、コモンネームが「アクティベート待ち」になりました。
Webサーバー側で実施すること
証明書発行
今度はWebサーバー側での実施となります。
手順としては新規発行と同じく、秘密鍵(KEY)の生成を行い、証明書署名要求(CSR)を作成し、サーバ証明書(CRT)を作成するわけですが、自分で証明書署名要求(CSR)に署名するのではなく、フジSSL側にCSRを渡し署名してもらいサーバ証明書(CRT)を発行してもらうことになります。
ということで秘密鍵を生成しましょう。
# pwd
/etc/ssl/certs
#
# openssl md5 * > rand.dat
# openssl genrsa -rand rand.dat -des3 2048 > kamata.key
324 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
.......................................................................................................................................................................................................................+++
....+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
#
des3オプションを付けなければパスフレーズなしになりますが、セキュリティ上の観点からパスフレーズ付きで2048ビットの鍵の生成をお勧めします。
なお、パスフレーズもランダムなものにしないといけません。
として表示されたランダムな文字列に!、>、.、$などの記号も入れてパスフレーズを作成しましょう。
ここで作成されたパスフレーズは後で利用しますので必ず控えておいて下さい。
さて、続いてCSRの生成です。
Enter pass phrase for kamata.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]:Ohta-Ku
Organization Name (eg, company) [Default Company Ltd]:Kamata-Net
Organizational Unit Name (eg, section) []:Apache
Common Name (eg, your name or your server's hostname) []:blog.kamata-net.com
Email Address []: <-Enter
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:<-Enter
An optional company name []:<-Enter
#
できたCSRの中身を見てみましょう。
ちゃんと指定した通りにできていることが確認できました。
再びFujiSSLでの作業
証明書署名・発行
会員サイトに戻り、「証明書」→「証明書管理」を選択し下の方にコモンネームが「アクティベート待ち」となっているものについて「詳細」ボタンを押下します。
コモンネームは当サイトの「kamata-net.jp」、認証方式は「ファイル認証」を選択します。
次の画面で、生成したCSRの情報をコピー&ペーストし、住所などの必要事項を記入します。
完了すると以下のようなメールが送られてきますのでWebサーバのDocument Root配下に.well-known/pki-validationというディレクトリを作成し、添付のfileauth.txtを配置します。
https://kamata-net.jp/.well-known/pki-validation/fileauth.txtでアクセスできることを確認しておきます。
自動的にクローリングされてチェックされるので、しばらく待ちましょう。
通常5分程度でサーバー証明書がメールで送られてくるのですが、送られてこない場合何か起きているかもしれません。
調べてみると、403 Forbiddenでアクセスできていません(218.45.184.224からのアクセスは成功していますが、これは上記の確認のためのアクセスです)。
153.126.158.67 - - [22/Apr/2018:11:15:02 +0900] "GET /.well-known/pki-validation/fileauth.txt HTTP/1.1" 403 655 241 "-" "PEAR HTTP_Request class ( http://pear.php.net/ )"
153.126.158.67 - - [22/Apr/2018:11:15:03 +0900] "GET /.well-known/pki-validation/fileauth.txt HTTP/1.1" 403 833 241 "-" "PEAR HTTP_Request class ( http://pear.php.net/ )"
157.7.136.253 - - [22/Apr/2018:11:15:04 +0900] "GET /.well-known/pki-validation/fileauth.txt?s=152436330412802978 HTTP/1.0" 403 7771 241 "-" "-"
157.7.136.253 - - [22/Apr/2018:11:15:04 +0900] "GET /.well-known/pki-validation/fileauth.txt?s=15243633041791866920 HTTP/1.0" 403 46605 241 "-" "-"
そういえばこのドメインに対しては内部ネットワーク、もしくはリファラが特定のサイト、もしくはUser-Agentが特定ものしか許可していませんでした。
Allow from allを27行目に追記して、systemctrl restart httpdを実行してapacheの再起動を実施します。
<Directory "/wordpress/wp-content"> SetEnvIf Referer "^https://blog.kamata-net.com" check SetEnvIf Referer "^https://blog.kamata-net.com" check SetEnvIf Referer "^http://kamata-net.com" check SetEnvIf Referer "^http://kamata-net.jp" check SetEnvIf Referer "^https://kamata-net.jp" check SetEnvIf Referer "^http://www.facebook.com" check SetEnvIf Referer "^http://facebook.com" check SetEnvIf Referer "^http://twitter.com" check SetEnvIf User-Agent "facebookexternalhit" check SetEnvIf User-Agent "Googlebot" check SetEnvIf User-Agent "GoogleImageProxy" check SetEnvIf User-Agent "Slurp" check SetEnvIf User-Agent "Yahoo" check SetEnvIf User-Agent "msnbot" check SetEnvIf User-Agent "bingbot" check SetEnvIf User-Agent "iPhone" check SetEnvIf User-Agent "iPad" check SetEnvIf User-Agent "Android" check SetEnvIf User-Agent "Smush.it" check SetEnvIf User-Agent "Google-Site-Verification" check Order deny,allow Deny from all Allow from env=check Allow from 192.168.0.0/24 Allow from 218.45.184.224 Allow from all </Directory>
Allow from allは一時的に許可してものですので、一連の作業完了後必ず元に戻しておきましょう。
Webサーバー側の設定
証明書の配置
メールで添付されたサーバー証明書、中間CA証明書をWebサーバに移送し解凍します。
Archive: kamata-net.jp.zip
inflating: kamata-net.jp.crt
inflating: ca-bundle.ca
inflating: README.txt
#
必要に応じてファイル名の変更や適切なパーミッションを設定しましょう。Keyは秘密鍵ですから公開は不要です。中間CA証明書及びサーバ証明書はRead Onlyで公開しましょう。
# mv kamata.key kamata-net.jp.crt
# chmod 444 kamata-net.jp.ca
# chmod 444 kamata-net.jp.crt
# chmod 400 kamata-net.jp.key
# ls -l kamata-net.jp.*
-r--r--r-- 1 root root 3228 4月 29 22:35 kamata-net.jp.ca
-r--r--r-- 1 root root 1598 4月 29 22:36 kamata-net.jp.crt
-r-------- 1 root root 1743 4月 29 19:26 kamata-net.jp.key
#
Apacheの自動起動設定
実はApacheの起動用スクリプトのhttpd-ssl-pass-dialogというコマンド中のパスフレーズを変更する必要があります。
# Pass Phrase Dialog: # Configure the pass phrase gathering process. # The filtering dialog program (`builtin' is a internal # terminal dialog) has to provide the pass phrase on stdout. SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
/usr/libexec/httpd-ssl-pass-dialogの4行目のパスフレーズを、先ほど設定したパスフレーズに変更します。
#!/bin/sh #exec /bin/systemd-ask-password "Enter SSL pass phrase for $1 ($2) : " echo "(パスフレーズ)"
ウェブブラウザから証明書の情報を確認して、期間が更新されていることを確認して完了です。
記事は以上。