さくら VPS に SSL サーバー証明書を設定する (CentOS7 + nginx + RapidSSL)

はじめに

さくらの VPS に、SSL サーバー証明書を設定して、サイトを https 化します。

注意事項

コマンドはすべて root 権限での操作です。

目次

環境

  • VPS : さくらVPS 1G SSD
  • OS : CentOS 7.3
  • その他 : nginx/1.10.2, ラピッドSSL(Rapid SSL), OpenSSL 1.0.1

申し込む前に用意するもの

今回は /etc/nginx 以下に、SSL 認証局へ提出するための CSR (Certificate Signing Request) を作成します。openssl がインストールされていない場合はインストールしてください。

# cd /etc/nginx
# openssl req -new -newkey rsa:2048 -nodes -keyout server2017.key -out server2017.csr

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

openssl コマンド

openssl コマンドの内容は以下の通りです。

  • -newkey : 新しい秘密鍵を、RSA の 2048 ビットで作成します。
  • -nodes : 秘密鍵をパスフレーズなしで作成します。
  • -keyout : 秘密鍵のファイル名(任意)を指定します。(例:server2017.key)
  • -out : CSRのファイル名(任意)を指定します。(例:server2017.csr)

情報の入力

CRS に含まれる情報(ディスティングイッシュネーム)を入力します。

  • Country Name (2 letter code) [XX] : 国コードを入力します。日本の場合は「JP」です。
  • State or Province Name (full name) [] : 都道府県名を入力します。
  • Locality Name (eg, city) [Default City] : 市区町村名を入力します。
  • Organization Name (eg, company) [Default Company Ltd] : 組織名を入力します。
  • Organizational Unit Name (eg, section) [] : 部署名を入力します。
  • Common Name (eg, your name or your server's hostname) [] : 名前またはサーバホスト名を入力します。
  • Email Address [] : メールアドレスを入力します。

SSLサーバー証明書の申し込み

さくらの SSL から、ラピッド SSL を選択して申し込みます。CSR の入力画面で、先ほど作成した CSR ファイルの中身をコピーして貼り付けます。

-----BEGIN CERTIFICATE REQUEST-----
(略)
-----END CERTIFICATE REQUEST-----

申し込み後しばらくすると、認証ファイルのアップロードについてのメールが送られてきます。

認証用ファイルのアップロード

さくらの会員メニューの [契約情報]-[契約サービスの確認] から認証用ファイルをダウンロードし、サーバのルート直下にアップロードします。 ブラウザから http://<ドメイン>/<認証ファイル> にアクセスできれば OK です。

しばらくすると SSL サーバ証明書発行のメールが送られてきます。さくらの会員メニューの [契約情報]-[契約サービスの確認] から SSL サーバー証明書をダウンロードします。さらにメールに記載された URL から中間CA証明書をダウンロードしておきます。

SSLの設定

nginx 用に証明書のファイルを作成し、SSL サーバー証明書と中間 CA 証明書の内容をコピーします。ここでは /etc/nginx にserver2017.crt というファイルを作成しています。

# vi /etc/nginx/server2017.crt

-----BEGIN CERTIFICATE-----
(SSLサーバー証明書)
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
(中間CA証明書)
-----END CERTIFICATE-----

nginx の設定ファイルを変更する

nginx の設定ファイルを以下のように変更します。http にアクセスされた場合は、https にリダイレクトされるようにします。

# vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
server {
  listen 80;
  listen [::]:80;
  server_name _;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl http2 default_server;
  listen [::]:443 ssl http2 default_server;
  server_name _;

  ssl_sertificate /etc/nginx/server2017.crt;
  ssl_sertificate_key /etc/nginx/server2017.key;
  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 10m;
  ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
  ssl_prefer_server_ciphers on;
}
  • ssl_sertificate : SSL サーバー証明書を指定します。
  • ssl_sertificate_key : CSR を作成したときに作成した key ファイルを指定します。
  • ssl_session_cache : SSL セッションキャッシュのサイズを指定します。
  • ssl_session_timeout : SSL セッションタイムアウトの時間を指定します。
  • ssl_chiphers : SSL で使用する暗号化スイートを指定します。
  • ssl_prefer_server_ciphers : ON にすると、サーバの暗号化スイートを優先します。

設定ファイルが正しいことを確認し、nginx を再起動します。

# nginx -t
# sytemctl restart nginx

ファイアウォールを設定する

ファイアウォールで、https を許可するように設定します。まずは現在の設定を確認します。

# firewall-cmd --list --all

public (active)
  target: default
  icmp-block-inversion: no
  interface: eth0
  sources:
  services: dhcpv6-client http ssh
  ports:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

https のサービスを許可します。

# firewall-cmd --add-service=https --noze=public --permanent

firewalld を再起動します。

# firewall-cmd --reload

ブラウザより、https でアクセスできれば成功です。

その他の設定

Google アナリティクスの変更

Google アナリティクスを設定してある場合は、サイトのプロパティ設定とビュー設定にあるウェブサイトの URL を https:// に変更します。

Google Serch Console の変更

プロパティの追加より、https:// の url を追加します。

Wordpress の変更

[設定]-[一般] の Wordpress アドレス (URL) と、サイトアドレス (URL) を https:// に変更します。