当サイトはさくらVPS上のUbuntu 14.04LTSでWordPressを構築して運用しております。そこで、SSLサーバ証明書はさくらインターネットのサービスであるラピッドSSLを使用することにしました。このサービスを選んだ理由は次になります。
- 価格が安い
- すでにアカウントを所持しているため、一元管理ができる
作業はWindows上のターミナルからSSH接続をして作業することを想定します。
環境
今回の移行を行った環境は以下になります。
ubuntuのバージョンは次になります。
cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"
apacheのバージョンは次になります。
apache2 -v
Server version: Apache/2.4.7 (Ubuntu)
Server built: Jul 27 2017 15:20:24
秘密鍵と証明書署名要求(CSR)の作成
ラピッドSSLに申し込む前に、秘密鍵と証明書署名要求をサーバ上で作成しておきます。
秘密鍵はopensslコマンドを用いて作成します。このとき、パスフレーズを要求されますので、4文字以上の文字列を入力します。
openssl genrsa -des3 -out www.trifields.jp.key 2048
Generating RSA private key, 2048 bit long modulus
..........................................................................+++
.........................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for www.trifields.jp.key:
Verifying - Enter pass phrase for www.trifields.jp.key:
このパスフレーズはWebサーバの再起動に入力を求められたりするため、必ず控えておくことをお勧めします。しかし、Webサーバの再起動ごとにパスフレーズを入力することは大変です。この解決方法は主に次の2つあります。
- 入力を求められたときに、パスフレーズを記したファイルを実行し自動入力させる
- パスフレーズを取り除く
ここでは、パスフレーズを取り除く方法を採用します。次のコマンドによりパスフレーズを取り除いた秘密鍵を作成します。このとき、パスフレーズの入力を求められますので、上記で設定したパスフレーズを入力してください。
openssl rsa -in www.trifields.jp.key -out www.trifields.jp.key.insecure
Enter pass phrase for www.trifields.jp.key:
writing RSA key
ファイル名を整理します。
mv www.trifields.jp.key www.trifields.jp.key.secure
cp www.trifields.jp.key.insecure www.trifields.jp.key
次に、パスフレーズを取り除いた秘密鍵から証明書署名要求を作成します。今回は、ドメイン認証型のSSLを用います。そのため、証明書署名要求の作成時に指定する項目において、FQDNを指定するコモンネームの箇所のみが重要となります。URLはwwwの有無に関わらずにwwwを付けた方が良いと思います。
SANsの自動登録について
「www」または「www」を削除したコモンネームがSANsに自動登録されます。
コモンネーム「www.sakura.ad.jp」で申請した場合、「https://www.sakura.ad.jp/」と
「https://sakura.ad.jp」の2通りのアクセスに対して、SSL暗号化通信が可能となります。
次のコマンドにより、秘密鍵から証明書署名要求を作成します。
openssl req -sha256 -new -key www.trifields.jp.key -out www.trifields.jp.csr
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) [AU]:JP # 国名
State or Province Name (full name) [Some-State]:Ishikawa # 都道府県
Locality Name (eg, city) []:Kanazawa-shi # 市区町村
Organization Name (eg, company) [Internet Widgits Pty Ltd]:trifields # 組織名
Organizational Unit Name (eg, section) []: # 組織単位名
Common Name (e.g. server FQDN or YOUR name) []:www.trifields.jp # FQDN: ここ以外は省略可
Email Address []: # メールアドレス
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # 空欄
An optional company name []: # 空欄
さくらのラピッドSSLに申し込み
ラピッドSSL | さくらのSSLから申し込みます。
ラピッドSSLの「新規お申込み」をクリックします。
すでにアカウントを持っているので、「ログイン画面へ進む」をクリックします。
「会員ID」と「パスワード」を入力し「ログイン」をクリックします。
「サービス選択画面へ」をクリックします。
ラピッドSSLの「契約年数」および「お支払い方法」を選択および入力します。また、「契約のご確認」に目を通して同意するにチェックします。私は、ラピッドSSLの契約年数を3年としました。入力が終われば「CSRの入力へ進む」をクリックします。
左側のテキストボックスに、事前に作成したおいた証明書署名要求の内容を貼り付けます。
具体的には、サーバ上で証明書署名要求をvimで開き、ターミナルからコピーして貼り付けます。成功すると、証明書署名要求の作成時に入力したコモンネームなどが右側に表示されます。
ここで、表示された証明書署名要求をしっかり確認しておきます。不備が見つかった場合は、再度、証明書署名要求を作成し、左側のテキストボックスに貼り付けます。問題が無ければ、「確認画面へ進む」をクリックします。
内容をしっかりと確認します。問題が無ければ、ラピッドSSLを申し込みます。
申し込みが完了すると、「お申込み受付完了のお知らせ」メールが届きます。その後しばらくして、「[さくらインターネット]SSLサーバ証明書 認証ファイルのアップロードについて」メールが届きます。私の場合は、約20分でこのメールが届きました。このメールにドメインの使用権の確認のための手順が記載されています。
会員メニュー|さくらインターネットからログインして、上部メニューの「契約情報」→「契約サービスの確認」をクリックします。新たにラピッドSSLが追加されていますので、手続きの箇所の「サーバ証明書」をクリックします。
ページが遷移して、「認証ファイルDL」をクリックして認証ファイルをダウンロードします。
認証ファイルのダウンロード後から認証までの手順については、省略させていただきます。詳しい内容は、「[さくらインターネット]SSLサーバ証明書 認証ファイルのアップロードについて」に記載されています。手順は、詳しく記載されているため、難しいところはありませんでした。
ちなみに、私は実際に認証ファイルはアップロードせずに、ターミナルから新たにファイルを作成し、認証ファイルの内容を写しました。あと、chownコマンドにより認証ファイルの所有者やグループを変更しておきました。
認証局は自動的に認証ファイルのクローリングを行っているため、しばらく待ちます。私の場合は、約20分で「[さくらインターネット]ジオトラスト SSLサーバ証明書発行のお知らせ」が届き、証明書が発行されました。
証明書の発行が完了しましたら、認証ファイルは不要ですので、忘れずに削除しておきます。
SSLサーバ証明書のダウンロード
認証が完了したら、さくらインターネットの会員メニュー→契約情報から、発行された証明書をダウンロードします。
vimで証明書の内容を写そうとしたら、上手くいかなかったため、素直にアップロードします。証明書のファイル名を変更しておきます。
mv server.crt www.trifields.jp.crt
ラピッドSSLの認証方式が3段階構造となっているため、中間CA証明書を設置する必要があります。そのため、中間CA証明書(ラピッドSSL用)ダウンロード(SHA-2)|SSLサーバ証明書 ジオトラストから、中間CA証明書を取得します。
実際は、ターミナル上でvimを開き、証明書の内容を写し中間CA証明書を作成します。
vim rapidssl-sha256-ca.crt
証明書の設置
秘密鍵や証明書の権限や所有、グループを変更して/etc/ssl内に設置します。
sudo chmod 600 www.trifields.jp.key
sudo chown root:root www.trifields.jp.key
sudo chown root:root www.trifields.jp.crt
sudo chown root:root rapidssl-sha256-ca.crt
sudo mv www.trifields.jp.key /etc/ssl/private
sudo mv www.trifields.jp.crt /etc/ssl/certs
sudo mv rapidssl-sha256-ca.crt /etc/ssl/certs
apacheの設定
/etc/apache2/sites-available内には、default-ssl.confがあります。ここでは、これをコピーしたうえで、改変してssl化することにします。
sudo cp default-ssl.conf www.trifields.jp-ssl.conf
sudo vim www.trifields.jp-ssl.conf
既存のHTTPのconfファイルの内容をwww.trifields.jp-ssl.confに写したうえで、新たに次の内容を追加します。
SSLCertificateFile /etc/ssl/certs/www.trifields.jp.crt
SSLCertificateKeyFile /etc/ssl/private/www.trifields.jp.key
SSLCertificateChainFile /etc/ssl/certs/rapidssl-sha256-ca.crt
sslのmodおよびサイトを有効化し、apacheを再起動します。
sudo a2enmod ssl
sudo a2ensite trifields.jp-ssl.conf
sudo service apache2 restart
ここでブラウザからhttps://で接続できるか確認します。HTTPS化が成功した場合は、きちんとhttpsで接続できます。
WordPressの設定変更
WordPressにログインして、設定からhttpをhttpsに変更します。
Search Regexプラグインを用いて、内部リンクのhttp://の部分を修正します。ここでは、当該ページがhttp://であればhttp://となり、https://であればhttps://と読み替えられるプロトコル相対URLに修正します。
robots.txtの変更
robots.txtにサイトマップの場所を記述している場合は、httpsも追加します。
Sitemap: http://www.trifields.jp/sitemap.xml
Sitemap: https://www.trifields.jp/sitemap.xml
Google Search ConsoleにhttpsのURLを追加
Google Search ConsoleにhttpsのURLを追加します。
Google Search Consoleにログインして、右側にある「プロパティの追加」をクリックし、httpsのURLを追加します。
httpsのURLの所有権を確認するページに遷移します。私はすでにGoogle アナリティクスを導入していますので、そのまま「確認」をクリックします。
すぐに所有権が確認されました。
続いて、httpsのサイトマップを送信します。
左側のメニューからクロール、サイトマップを選択し、サイトマップの追加/テストから、サイトマップを追加します。
httpからhttpsへ301リダイレクトする設定
ターミナル上から.htaccessファイルを開き、httpからhttpsへリダイレクトする設定を追記します。
# 追記 -- ここから
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [L,R=301]
</IfModule>
# 追記 -- ここまで
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
きちんとリダイレクトされるかを確認するために、Google検索で「site:www.trifields.jp」を検索します。出てきたリンクを適当に選択してリダイレクトが上手くいっていることを確認しました。