SSL 導入手順書(さくらのVPS + SureServer for SAKURA編)

カテゴリー: 手順書,

Chrome

最近の事情により導入依頼が多いSSL。数年前から「将来絶対必須なんでつけといたほうがいいですよ?」「うーんお金かかるからいいや」というお客様たちが変に焦ってても「だから言ったでしょ?」って冷たくしたくなる気持ちを誰かにわかってほしかったり。

というわけで、さくらのVPSとかに SureServer for SAKURA を導入する手順メモです。作業環境は Windows 10。

DN情報

お客様へ作業事前にDN情報を確認しましょう。
あとOpenSSLは最新版にしておいたほうがいいです、脆弱性とかなんかあったので。

ファイアウォール

ファイアウォールでHTTPS通信が許可されているか確認

firewall-cmd --list-all

画面だとこんな感じです

「services:」 に「https」が含まれていない場合はファイアウォールに登録する。

vi /etc/firewalld/zones/public.xml

下記を追加します。

<service name="https"/>

再起動して再確認

firewall-cmd --reload
firewall-cmd --list-all

ポート443 が開いてるかどうか確認

ss -t -l -n

SSL関連ファイル

任意の名前「ssl_certs」ディレクトリを作成してひとまとめにしてます。複数サイトを動かしている場合、初回のみの作業となります。

秘密鍵の作成

SSLサービスへ申し込むために必要なものをそろえていきます。

mkdir /etc/nginx/ssl_certs
cd /etc/nginx/ssl_certs

擬似乱数ファイルを作成

touch sha1.dat
openssl sha1 * > sha1.dat

秘密鍵ファイル「.key」を新規作成。下記実行後、パスフレーズ入力。

openssl genrsa -des3 -out example.key -rand sha1.dat 2048

秘密鍵の復号化ファイルを作成

秘密鍵をそのまま利用すると、nginx再起動時にパスフレーズを入力できずに起動に失敗するので、鍵ファイルを復号化しておきます。

openssl rsa -in example.key -out example.decrypted.key

CSRの作成

下記実行後、パスフレーズ入力し、DN情報を入力。

openssl req -new -key example.key -out example.2018.csr

※ 以下の3つはエンターキーでスキップ

  • e-Mail Address
  • A challenge password
  • An optional company name

取得したCSRをさくらの申込書画面で貼り付けます。
その後案内のメールが来くるまで休憩です

証明書のダウンロード

メールが来たあとの作業です。

中間 CA 証明書のダウンロード

さくらの手順書PDFに載っているものだと動きませんでした。ここらへんは謎です・・・
✗ https://www.cybertrust.ne.jp/sureserver/download/root_ca/PUBCAG3_sha2.txt
○ https://jprs.jp/pubcert/service/certificate/

認証ファイルのダウンロード

さくらより送られてくるメール内の説明をたどって取得します。「準備中」になってるほうをクリック

 


※ 認証ファイルは「123456789123456789123456789123456789.txt」みたいなテキストファイルでした。クローラがアクセスする指定場所に設置します。

/usr/share/nginx/example.com/public_html/.well-known/pki-validation

とりあえずブラウザで確認してみるのをおすすめします。

当然ですがクローラは「wwwなし」のほうへアクセスし認証を行いますので、「wwwなし」から「wwwあり」へリダイレクトがかかっている場合はリダイレクト解除の必要があります。

※リダイレクト解除されない場合に試す方法

  • restart、reload ではなく、systemctl stop nginx, systemctl start nginx で試す
  • Chromeなどブラウザ(またはDNS)がリダイレクト処理をキャッシュしている場合があるのでシークレットウィンドウまたは別環境で試す。スマホで Wifi Off とか便利です

以上、30分程で認証が完了し、認証ファイルをダウンロードしたページにて証明書ファイルがダウンロードできるようになります。

証明書のインストール

サーバー証明書「server.crt」をダウンロードしたら、「.well-known」以下は不要のため削除します。

JPRS_DVCA_G2_PEM.cer を ssl_certsへアップロード
「server.crt」を「example.2018.crt」にリネーム、ssl_certsへアップロード

中間証明書とサーバー証明書を単純連結します
※ 中間証明書がPEM形式だったのでpemで出力
※ 試しにcrtで出力してみたけどプライバシーエラーになった

cd /etc/nginx/ssl_certs
cat example.2018.crt JPRS_DVCA_G2_PEM.cer > example.2018.pem

改行コードをチェック&2つのpemファイルを編集

vi example.2018.pem

※ 改行位置で「^M」などある場合は、viで削除する

「—–END CERTIFICATE—–—–BEGIN CERTIFICATE—–」

「—–END CERTIFICATE—–
—–BEGIN CERTIFICATE—–」
となるように改行する。
※ 上側がサーバー証明書、下側が中間証明書と認識されます

反映テスト

nginx -t
systemctl stop nginx
systemctl start nginx

nginx 設定変更

証明書を作成し終わったらNginx側へ反映します。

/etc/nginx/conf.d/example.com.conf

server {
    # ポート変更
    listen  443 ssl;
    server_name  example.com;
    root  /usr/share/nginx/example.com/public_html;

    # 下記を追加
    ssl_certificate  /etc/nginx/ssl_certs/example.2018.pem;
    ssl_certificate_key  /etc/nginx/ssl_certs/example.decrypted.key;
    ssl_session_timeout  5m;
}

# fastcgi を使っている場合は下記1行を追加
location ~ \.php$ {
    fastcgi_param  HTTPS on;
}

サイトへ https で表示してみて、http混在問題などあれば修正していきます。終わりましたら必要に応じて、httpへのアクセスをhttps側へリダイレクトします。

server {

    listen  80;
    server_name  example.com;
    root  /usr/share/nginx/example.com/public_html;
    return 301 https://$host$request_uri;

}

www有り無しにお気をつけて。httpsかつwwwありなしでリダイレクトの処理も必要とかあるかもしれません、
以上SSL導入メモでした、しかし本番環境反映時に失敗してNginxのインデックスページが表示されると焦るよねホント・・・

 

 


関連記事

手順書」のBookmark
「手順書」記事一覧