初年度無料だしさくらインターネットのRapidSSL契約した

Sep 8, 2015   #rapidssl  #sakura-vps  #ssl  #nginx 

個人的にはStartSSL(無料)さんでも問題はなかったのですが、
いろいろサブドメインつけてownCloudさんとかもやりたいし
どのみち複数またはワイルドカードのSSL証明書欲しくなるなぁと思っていました。

今回さくらインターネットさんが、初年度無料やってたので
どうせ複数SSLやる可能性あるなら、無料のうちにひとつとっておこうということで証明書を取得しました。
※2015年9月現在

複数契約よりワイルドカードのほうがコスト下がるならそうするかな。程度で…

せっかく取得して設置したので、その時のメモを一部文字伏せつつ残しておきます。

環境

  • Host: Sakura VPS 2GB
  • OS: Ubuntu 14.04
  • httpd: Nginx 1.8.0
  • SSLのドメイン: www.FQDN (ex: www.example.com)
  • Client: Mac OS X Yosemite 10.10.5
    • scpで転送したりするために念のため記載

環境の前提条件とか

あくまでも今回試したパスの例です。
皆様の環境と異なる可能性が大いにありますので、よしなにご自身の環境に合わせてください。
ファイル名にしてもパスにしても、基本的にどこにおいても問題ないはず。完全に好みの問題です。

また、大文字で記載しているYYYYMMDD,FQDNとかも、よしなにご自身の環境に合わせてください。

www.FQDN で取得しているのは、RapidSSLの場合、
https://www.FQDN,https://FQDN 両方で使うことが出来るためです。

  • SSL証明書まわりの物理ファイルパス
    • .crt(SSL証明書) : /usr/local/etc/ssl/certs
    • .csr(署名要求) : /usr/local/etc/ssl/certs/csr
    • .key(秘密鍵) : /usr/local/etc/ssl/keys
    • .pem(ハッシュアルゴリズム) : /usr/local/etc/ssl/dhparams
  • SSL証明書周りのシンボリックリンク
    • /usr/local/etc/ssl/certs/www.FQDN.crt -> /usr/local/etc/ssl/certs/YYYYMMDD.chain.www.FQDN.crt
    • /usr/local/etc/ssl/keys/www.FQDN.key -> /usr/local/etc/ssl/keys/YYYYMMDD.www.FQDN.key
    • ※dhparamはシンボリックリンクつけてない…とくに更新してないからです。
      ※keyも別にすでにあるならそれで問題ないと思います。

忘れないうちにdhparam作っておく

これはドメインごとに使いまわしたりしなくていいと思うけど、一応作っておく。
すでにある場合とかは無視してください。

$ cd /usr/local/etc/ssl/dhparams
$ sudo openssl dhparam -out www.FQDN.pem 2048
$ sudo chmod 644 www.FQDN.pem

秘密鍵の作成

SSL証明書を発行するにあたって、署名要求(CSR)の作成が必要です。
その署名要求(CSR)を作成するのに、秘密鍵が必要となります。
また、実際に発行されたSSL証明書をApacke/Nginxなどで利用するときにもその鍵を使います。
すでにある場合とかは無視してください。

$ cd /usr/local/etc/ssl/keys
$ sudo openssl genrsa -out YYYYMMDD.www.FQDN.key 2048

csrの作成

ここで指定するFQDN(ドメイン)のSSLが発行を依頼(署名を要求)するためのファイルです。
FQDNとか国とか住んでるところとか団体名とか言われます。そのままが証明書の申請に利用されます。

$ cd /usr/local/etc/ssl/certs/csr
$ sudo openssl req -new -key /usr/local/etc/ssl/keys/YYYYMMDD.www.FQDN.key -out YYYYMMDD.www.FQDN.csr

SSL申請時に必要なので、csrの中身をコピーしておく

$ cd /usr/local/etc/ssl/certs/csr
$ sudo cat YYYYMMDD.www.FQDN.csr

ブラウザからさくらインターネットのRapidSSLを申請

ブラウザの画面にしたがって契約を進めます。
この時に決済情報とかの後かな? 先ほど作成したcsrの中身を貼り付けます。

csrの中身からSSL申請してるドメインとかが表示されるので、それで問題なければ次へ進みます。

しばらく待つと、さくらインターネット会員情報の契約サービスページ に「認証ファイルDL」ボタンが出てきます。

この状態は、csrファイルをRapidSSLが受け取ったけど、本当にあなたのサイトなのか証明してほしい。
ランダムな文字列の.htmファイルを一つ用意したから、SSLを設置したいサイトのルートにおいてください。という状態です。

RapidSSLさん(BOTでしょうか?)が定期的にhttp://www.FQDNへアクセスしてきます。
htmファイルとその中身が正常に確認された場合、証明書が発行されます。

サーバ証明ファイルをWebサーバに設置

結論なんでもいいです。ApacheでもNginxでも。
HTTPまたはHTTPSで、申請したwww.FQDNのページのルートに、証明するためのファイルをぽっこーんとおきます。
この時、申請したドメイン(www.FQDN)に置く必要があります。他のドメイン・サブドメインではダメです。
※前提にもありますとおり、www.FQDNでとった場合はFQDNだけでもSSL証明書の利用ができますが、
この作業の時はwww.FQDNに設置する必要があります

念のためブラウザからそのファイルが閲覧出来るか確認しておきましょう。
確認できない場合は、ApackeとかNginxとかの設定か、設置したファイルのパーミッションの問題でしょう。

設置できたらアクセスログみて待つもよし、ぼーっとするもよし。
とにもかくにも気長に待ちましょう。
RapidSSLさんがアクセスして確認してくれて、正常であればさくらインターネットさんから証明証発行できたとのメールが来ます。
※自分の場合は10分くらいで連絡来ました。

サーバ証明用のサイト作る ※すでに持ってる・動いてる方は飛ばしてください

サーバ証明ファイルをサーバに転送

$ cd ~/Downloads
$ scp xxxxx.htm user@FQDN:/tmp

サーバ証明用にNginxでサイトつくる (Nginx入れるとかはどこかを参考にしてください…)

$ sudo mkdir -p /var/www/www.FQDN
$ sudo mv /tmp/xxxxx.htm /var/www/www.FQDN/
$ sudo chmod 644 /var/www/www.FQDN/xxxxx.htm
$ sudo vi /etc/nginx/sites-available/www.FQDN

Example www.FQDN

server {
    listen 80;
    listen [::]:80;

    root /var/www/www.FQDN;
    index index.html index.htm;

    server_name www.FQDN;
    server_tokens off;

    location / {
        try_files $uri $uri/ /index.html;
    }
    location ~ /\. {
        deny all;
    }
}

sites-enabledでシンボリックリンクを作成

$ cd /etc/nginx/sites-enabled
$ sudo ln -s /etc/nginx/sites-available/www.FQDN

Nginx のconfigテストとリロード
syntax errorが出た場合は、何行目がおかしいよとか教えてくれます。
そもそもstartしてないよ、ってひとはstartしてあげてくださいね。

$ sudo nginx -t
$ sudo service nginx reload

crtファイルの設置

さくらインターネットからメールがきたら、再度さくらインターネット会員情報の契約サービスページ を開きます。
「サーバ証明書DL」ボタンになっていたら、いよいよcrtファイルがダウンロードできます。

SCPとかで転送するなり、テキストでサーバに貼り付けるなり。好きにしてサーバに起きましょう。

$ scp ~/Download/server.crt user@FQDN:/tmp

転送したファイルを保存しておきたい場所に置きます

$ sudo mv /tmp/server.crt /usr/local/etc/ssl/certs/YYYYMMDD.www.FQDN.crt

証明書ファイルの結合

まず、発行された証明書 と 中間証明書を結合します。
中間証明書を持ってこないとダメなので、そちらから持ってきます。

さくらインターネットのヘルプ から RapidSSL を選択して「RSA SHA-2」を開き、テキストでコピーしてきます。
どこでもいいのですが、適当にペーストしてファイルとして残しておきます。

$ sudo vim /usr/local/etc/ssl/certs/intermediate.rapidssl.pem

この時点で、以下のcertsディレクトリに以下のファイルがあります。

  • YYYYMMDD.www.FQDN.crt : RapidSSLから発行されたSSL証明書
  • intermediate.rapidssl.pem : RapidSSLの中間証明書

この2つを結合して、証明書を作成します。
直接テキストで結合しても問題ありません。
上から見て、[自分のサーバのSSL証明書][改行][中間証明書] の形であれば問題ありません。

$ cd /usr/local/etc/ssl/certs
$ sudo cat YYYYMMDD.www.FQDN.crt intermediate.rapidssl.pem > YYYYMMDD.chain.www.FQDN.crt

結合したものを確認してみます

$ sudo cat YYYYMMDD.chain.www.FQDN.crt

こんなかんじになってればOK

-----BEGIN CERTIFICATE-----
MIIErjCCA5agAwIBAgIDBrsuMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNVBAYTAlVT
...(長いので略)
pMOZ29ucpBqMD+AhUnXA1f099nmhKcVIUE+TtoVIMiHe90q8j3zgcPe4YKf/x49U
XtE=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEJTCCAw2gAwIBAgIDAjp3MA0GCSqGSIb3DQEBCwUAMEIxCzAJBgNVBAYTAlVT
...(長いので略)
gP8L8mJMcCaY
-----END CERTIFICATE-----

opensslコマンドで証明書の中身を確認できます

$ sudo openssl x509 -text -noout -in YYYYMMDD.chain.www.FQDN.crt

これで証明書の結合は完了です。

シンボリックリンクの切り替え(シンボリックリンク使わない人は飛ばしてください)

$ cd /usr/local/etc/ssl/certs
$ sudo ln -sf YYYYMMDD.chain.www.FQDN.crt www.FQDN.crt
$ cd /usr/local/etc/ssl/keys
$ sudo ln -sf YYYYMMDD.www.FQDN.key www.FQDN.key

nginxでSSLを有効にする

ここまで来たらあと一息です。

$ cd /etc/nginx/sites-available/
$ sudo vi www.FQDN

Example www.FQDN

server {
    listen 80;
    listen [::]:80;

    root /var/www/www.FQDN;
    index index.html index.htm;

    server_name www.FQDN;
    server_tokens off;

    # httpは全部httpsにリダイレクトする場合こちらを有効にして、それ以降コメントアウトでOK
    #return 301 https://$host$request_uri;

    # このあたりはすでに運用してるhttpでの設定が記載されてるかと。
    location / {
        try_files $uri $uri/ /index.html;
    }
    location ~ /\. {
        deny all;
    }
}

server {
    listen 443 ssl spdy;
    listen [::]:443 ssl spdy;

    root /var/www/www.FQDN;
    index index.html index.htm;

    server_name www.FQDN;
    server_tokens off;

    ssl                          on;
    ssl_stapling                 on;
    ssl_stapling_verify          on;
    ssl_certificate              /usr/local/etc/ssl/certs/www.FQDN.crt; #シンボリックリンク作成してる証明書のパス
    ssl_certificate_key          /usr/local/etc/ssl/keys/www.FQDN.key; #シンボリック作成してる秘密鍵のパス
    ssl_dhparam                  /usr/local/etc/ssl/dhparams/www.FQDN.pem; #ハッシュアルゴリズムのところ
    ssl_protocols                TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers    on;
    ssl_ciphers                  'ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS';
    ssl_session_cache            shared:SSL:10m;
    ssl_session_timeout          10m;

    location / {
        try_files $uri $uri/ /index.html;
    }
    location ~ /\. {
        deny all;
    }
}

Nginx の設定をテストします。
okが出なければ、何かしらおかしいです。
作成した証明書のパスにアクセスできないとか、証明書結合した結果がおかしいとかです。
その場合、結合を手動のコピーペーストでテキスト編集したほうが安全です。

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx の設定をリロードします

$ sudo service nginx reload

あとはブラウザで実際に動作を確認して、エラーが発生指定なければSSL設置完了です。

さらにopensslコマンドから証明書の確認が行えます

$ openssl s_client -showcerts -connect www.FQDN:443 -servername www.FQDN:443

httpからhttpsへのリダイレクトとか試した方は、このコマンドで正常にリダイレクトされてるかとか確認できます。
また、他のサブドメインをお持ちの方は、そちらも正常かどうか確認したほうが良いかもしれません。

$ curl -I -L www.FQDN