developers blog

さくら 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 がインストールされていない場合はインストールしてください。

1# cd /etc/nginx
2# openssl req -new -newkey rsa:2048 -nodes -keyout server2017.key -out server2017.csr
3
4Country Name (2 letter code) [XX]:JP
5State or Province Name (full name) []:
6Locality Name (eg, city) [Default City]:
7Organization Name (eg, company) [Default Company Ltd]:
8Organizational Unit Name (eg, section) []:
9Common Name (eg, your name or your server's hostname) []:
10Email 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 ファイルの中身をコピーして貼り付けます。

1-----BEGIN CERTIFICATE REQUEST-----
2()
3-----END CERTIFICATE REQUEST-----

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

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

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

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

SSLの設定

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

1# vi /etc/nginx/server2017.crt
2
3-----BEGIN CERTIFICATE-----
4(SSLサーバー証明書)
5-----END CERTIFICATE-----
6
7-----BEGIN CERTIFICATE-----
8(中間CA証明書)
9-----END CERTIFICATE-----

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

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

1# vi /etc/nginx/nginx.conf
/etc/nginx/nginx.conf
1server {
2  listen 80;
3  listen [::]:80;
4  server_name _;
5  return 301 https://$host$request_uri;
6}
7
8server {
9  listen 443 ssl http2 default_server;
10  listen [::]:443 ssl http2 default_server;
11  server_name _;
12
13  ssl_sertificate /etc/nginx/server2017.crt;
14  ssl_sertificate_key /etc/nginx/server2017.key;
15  ssl_session_cache shared:SSL:1m;
16  ssl_session_timeout 10m;
17  ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
18  ssl_prefer_server_ciphers on;
19}
  • 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 を再起動します。

1# nginx -t
2# sytemctl restart nginx

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

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

1# firewall-cmd --list --all
2
3public (active)
4  target: default
5  icmp-block-inversion: no
6  interface: eth0
7  sources:
8  services: dhcpv6-client http ssh
9  ports:
10  masquerade: no
11  forward-ports:
12  sourceports:
13  icmp-blocks:
14  rich rules:

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

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

firewalld を再起動します。

1# firewall-cmd --reload

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

その他の設定

Google アナリティクスの変更

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

Google Serch Console の変更

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

Wordpress の変更

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