SSL証明書を取得しよう

最近は、WebページやRESTful環境を立ち上げようにも、HTTPSでないと他のサイトと連携できなくなることが多くなりました。自己署名証明書(通称オレオレ証明書)で凌いできましたが、それも受け入れてくれないサイトが増えてきたので、これを機に、正式なSSL証明書を発行してみたいと思います。

証明書の取得には、さくらインターネットから購入できる「JPRSのSSL証明書」を利用してみたいと思います

費用は以下の通りです。

* JPRSのSSL証明書 の ドメイン認証型 1年：990円/年 (https://ssl.sakura.ad.jp/jprs/)
* さくらのメールボックス 1048円/年 (https://www.sakura.ne.jp/mail/)
* お名前.comドメイン 1円～/年 ※取得するドメイン名によって値段が異なります。(https://www.onamae.com/)
* AWS Route53 従量制(https://aws.amazon.com/jp/route53/pricing/)

(2020/4/21 追記)
FujiSSLに鞍替えしました。後半をご参照ください。

# ドメイン名の取得

まずは、SSL証明書を取得する対象のドメイン名を取得します。
すでにお持ちであれば、この作業は不要です。

今回は、お名前.comで申し込みました。2年目は値段が変わるので、1年経過するときに、2年目以降も継続するか慎重に考えましょう。
https://www.onamae.com/
Whois情報公開代行は、自身の情報を公開したくないのであれば、お願いしたほうが良いと思います。


# DNSサーバの設定

ドメイン名を取得したら、AWS Route53を使ってDNSサービスを設定し、DNSの正引きがうまくいくか確認してみましょう。

AWSのWeb管理コンソールのRoute53を開きます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/a647ff72-8c28-bf51-81cf-02d33b9930e0.png)

「Create Hosted Zone」ボタンを押下して、Domain Nameのところに取得したドメイン名を入力し、「Create」ボタンを押下して、NSレコードを作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/cc6fbeb2-3e88-74fd-1834-6324ecb470c9.png)

できあがったNSレコードのValueに4つのサーバのドメイン名が表示されています。
このサーバたちが、今回取得したドメイン名の名前を解決してくれるネームサーバです。
この4つのネームサーバを、ドメイン名を取得したお名前.comに登録することで、ドメイン名解決のためにこの4つのネームサーバに転送してくれるようになります。

お名前.comにログインし、「ネームサーバの設定」→「ネームサーバの変更」の画面で、「他のネームサーバを利用」を選択すると、ネームサーバ情報を入力する画面が表示されます。
複数指定できますので、4つのネームサーバをそれぞれ入力します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/da729624-9e3d-83d6-26a5-94c067fc49f2.png)

これで、ドメイン名のアドレス解決ができるようになりました。
試しに、AWS Route53から、Aレコードを追加し、nslookupでIPアドレスを正引きしてみましょう。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/57498fa4-b23d-eded-1f02-55a28c62d8c3.png)

```
> nslookup abcd.test.work
```

# CSRファイルの作成

それでは早速SSL証明書を取得しましょう。
と、そのために、SSL証明書を取得するにあたり、公開鍵ペア(秘密鍵)を生成しておく必要があります。
今回は、OpenSSLを使います。
途中、パスフレーズを何にするか聞かれますが、適当に入力します。4文字以上である必要があります。

```
> openssl genrsa -des3 2048 > server.key

Generating RSA private key, 2048 bit long modulus
..............................................................................................................................+++
..................................+++
e is 65537 (0x10001)
Enter pass phrase:
```

今度は、CSRファイルを生成します。途中パスフレーズを聞かれますが、さきほど指定したものを入力します。

```
> openssl req -new -key server.key -out server.csr
または
> openssl req -new -key server.key -out server.csr -sha256


Enter pass phrase for server.key: XXXXXXXXXX

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]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Indivisual
Organizational Unit Name (eg, section) []:Indivisual
Common Name (e.g. server FQDN or YOUR name) []:abcd.test.work
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
```

Common Name のところでは、これからSSL証明書を発行する予定のドメイン名を指定します。
最後に聞かれるパスワードは、とりあえず無しにしました。

公開鍵ペアのパスフレーズの入力を解除したい場合は、以下を入力してserver.keyを更新します。

```
> cp server.key server.key.org
> openssl rsa -in server.key -out server.key
```

# SSL証明書の申請

さっそく、さくらインターネットからJPRSのSSL証明書を取得するのですが、まずは、なんらかのさくらインターネットの会員になる必要があります。なんでもよいのですが、「さくらのメールボックス」にしました。

サービス一覧
https://www.sakura.ne.jp/

「さくらのメールボックス」
https://www.sakura.ne.jp/mail/

上記の準備ができたら、さくらインターネットに会員ページにログインできるか確認しておきます。
それでは、以下のページからいよいよSSL証明書の申請をします。

https://ssl.sakura.ad.jp/jprs/

一番安いドメイン認証型を選択しました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/652fd2fd-31f7-fdcf-88fb-43f925c13e79.png)
 
ログイン後、以下の画面で、CSRの入力を促されます。
先ほど作成したCSRファイル「server.csr」の内容をコピペしてください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/e61bfdbb-e57f-63b9-dd37-6a799bce1df8.png)

これで、申請が完了します。
そうすると、以下のメールが送られてきます。（送信されるまで、1時間ぐらい時間がかかりました）
読んでみていただけるとわかるのですが、Webサーバを立ち上げる必要があります。

```
さくらインターネット株式会社

           SSLサーバ証明書 認証ファイルのアップロードについて

この度は、さくらインターネットのサービスをお申込みいただき誠にありがとう
ございます。

お申込みいただきましたSSLサーバ証明書の申請が完了いたしましたので、お知
らせいたします。

  ================================================================
  《 SSLサーバ証明書の情報 》

     サーバ証明書種別：SSL JPRS ドメイン認証型（1年）
     サービスコード  ：XXXXXXXXX
     コモンネーム    ：abcd.test.work
  ================================================================

引き続き、認証局より申請いただいたドメインの使用権の確認がございますので、
以下の手順をご確認の上、認証ファイルのアップロードをお願いいたします。

認証ファイルは、10日以内にアップロードください。
10日以内に証明書が発行されませんと、申請が自動的にキャンセルされます。


＜注意事項＞

    コモンネーム対象先にアクセス制限（ベーシック認証、IPアドレス制限等）を
    かけている場合は、SSLサーバ証明書が発行されるまで、解除してください。

    証明書取得後、認証ファイルは削除されません。削除される際はお客様自身で
    お願いいたします。


■認証ファイルのアップロード手順

  ▽STEP1
    会員メニューにログインし、「契約情報」の一覧から該当サービスの「サー
    バ証明書」ボタンをクリックしていただき、詳細画面より認証ファイルをダ
    ウンロードしてください。

    ・会員メニュー - 契約情報
      https://secure.sakura.ad.jp/menu/service/index.php

  ▽STEP2
    ダウンロードした認証ファイルを、申請時に指定したFQDN(コモンネーム)
    配下にアップロードしてください。

    ※認証ファイルは以下のいずれかのURLに配置
      認証ファイル名は、[ランダムな文字列].txtです。ファイル名は申請ごとに
      異なります。

    例）
    http://[ルートドメイン名]/.well-known/pki-validation/[ランダムな文字列].txt 
    https://[ルートドメイン名]/.well-known/pki-validation/[ランダムな文字列].txt 

    ※「/.well-known/pki-validation/」のフォルダはお客さまで作成ください


  【ご注意ください】
      コモンネームを「www+ルートドメイン」（例：www.example.com）で
      申請した場合でも、wwwを取り除いたURLでないと認証されません。

        http://example.com/.well-known/pki-validation/[ファイル名].txt 
        https://example.com/.well-known/pki-validation/[ファイル名].txt 

    「www+ルートドメイン」のみのURLで、サイトを公開されている方は
    証明書が発行されるまでの間、上記形式のURLでも認証ファイルが
    確認できるよう、設定をお願いします。

      詳しくはサポートサイトをご確認ください。
      https://help.sakura.ad.jp/hc/ja/articles/206208881

  ▽STEP3
    認証用ファイルが配置されたことを認証局が確認し、証明書を発行します。


    ※認証局は、自動的に認証ファイルのクローリングを行っています
      認証ファイル設置後、証明書が発行されない場合は、お問い合わせください。

ご不明な点やご質問等ございましたら、本メール返信にてお問い合わせ
ください。

今後ともさくらインターネットをよろしくお願いいたします。


─── さくらインターネット株式会社　カスタマーセンター ───────

  ■Twitterサポート
    https://twitter.com/sakura_ope

  ■サポートサイト
    https://help.sakura.ad.jp/

  ■電話・メールによるお問い合わせ
    https://help.sakura.ad.jp/hc/ja/articles/206052622
      電話受付時間　：平日 9:45 - 18:00（土日祝、当社指定休日は休み）
      メール受付時間：10:00 - 18:00（土日祝営業、当社指定休日は休み）

───────────────────────────────────
```

以下のFAQに分かりやすく書いてあります。

https://help.sakura.ad.jp/hc/ja/articles/206208881

要するに、

1. https://secure.sakura.ad.jp/menu/service/index.php から認証ファイルをダウンロード。認証ファイルは「ランダムな文字列.txt」 となっています。
2. http://申請したFQDN/.well-known/pki-validation/ランダムな文字列.txt という感じで認証ファイルを配置

そうすると、以下のようなメールが送信されて、SSLサーバ証明書の発行が完了しました。

```
さくらインターネット株式会社

                      SSLサーバ証明書発行のお知らせ

この度は、さくらインターネットのサービスをお申込みいただき誠にありがとう
ございます。

お申込みいただきましたSSLサーバ証明書の発行が完了いたしましたので、以下
の通りお知らせいたします。

  ================================================================
  《 SSLサーバ証明書の情報 》

     サーバ証明書種別：SSL JPRS ドメイン認証型（1年）
     サービスコード  ：XXXXXXXX
     コモンネーム    ：abcd.test.work
     証明書有効期限  ：2019年XX月XX日
  ================================================================

つきましては、以下に手順を記載いたしますので、お客様にてご利用サーバへ
の導入作業を行っていただきますよう、お願いいたします。

※レンタルサーバサービスのコントロールパネルからお申し込みいただきまし
  たお客様につきましては、手順が異なります。
  （「サーバ証明書種別」に、「RS」と記載がある場合）

  「■レンタルサーバサービスのコントロールパネルからお申し込みのお客様
  について」をご確認ください。


◆◆◆Firefoxブラウザをお使いの方へ◆◆◆

JPRS SSL証明書におきましては失効情報を保存するOCSPレスポンダへの証明書
登録が発行から30分程度かかります。

そのため、発行直後にインストールしてサイトを閲覧すると証明書が失効して
いるように見える場合があります
。
証明書発行直後はFirefoxブラウザで閲覧しないようにお願いいたします。
Google Chrome やEdge等別のブラウザへの影響はございません。


━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■SSLサーバ証明書 ご利用開始までの手順

  ▽STEP1
    会員メニューにログインし、「契約情報」の一覧から該当サービスの「サー
    バ証明書」ボタンをクリックしていただき、詳細画面よりSSLサーバ証明書
    をダウンロードしてください。

    ・会員メニュー - 契約情報
      https://secure.sakura.ad.jp/menu/service/index.php

  ▽STEP2
    JPRS SSLサーバ証明書をご利用の際、お使いの機器へ中間CA証明書
    のインストールが必要となります。 

    下記URLより該当サービスの中間CA証明書を選択し、認証局のウェブサイト
    にて中間証明書をコピーし、テキストエディタに貼り付けていただき、中間
    CA証明書ファイルとして任意のファイル名で保存してください。

      https://jprs.jp/pubcert/info/manual/


  ▽STEP3
    以下のマニュアルをご参考の上、ダウンロードした「SSLサーバ証明書」と
    「中間CA証明書」をサーバにインストールしてください。

    ▼さくらのレンタルサーバでご利用の場合

      ・新規お申込みの場合
        https://help.sakura.ad.jp/hc/ja/articles/360000000582#034

      ・更新お申込みの場合
        https://help.sakura.ad.jp/hc/ja/articles/360000000642

    ▼さくらのレンタルサーバ以外のサーバでご利用の場合（新規・更新共通）

        https://jprs.jp/pubcert/info/intermediate/


■レンタルサーバサービスのコントロールパネルからお申し込みのお客様について

  SSLサーバ証明書が発行されると自動でサーバにインストールされます。ドメイン
  設定画面より、SSLを有効にすることで、ご利用可能となります。

  ・新規お申込みの場合
      https://help.sakura.ad.jp/hc/ja/articles/360000000622
    （「設定・お申し込み手順」のSTEP3をご確認ください）

  ・更新お申込みの場合
      https://help.sakura.ad.jp/hc/ja/articles/360000000642
    （「申し込み・設定」のSTEP2 - SSL設定を有効にする」以降をご確認ください）


■サイトシールについて

  認証局によって認証されたWebサイトであることを証明するシールを設定する
  ことで、Webサイトを訪れるお客様に対し、安全で信頼できるサイトであるこ
  とをアピールすることができます。

    https://jprs.jp/pubcert/info/seal/


■証明書の更新について

  次回の申請が可能となる時期に、証明書更新のご案内をご登録メールアドレス
  宛てにお送りいたします。

  今後も引き続き更新にてご利用される場合は、円滑に更新が行えるよう、お早
  目にお申し込みをいただきますようお願いいたします。

  なお、証明書更新時には新規取得時と同額の申請料が必要となりますので、あ
  らかじめご了承ください。

ご不明な点やご質問等ございましたら、本メール返信にてお問い合わせ
ください。

今後ともさくらインターネットをよろしくお願いいたします。


─── さくらインターネット株式会社　カスタマーセンター ───────

  ■Twitterサポート
    https://twitter.com/sakura_ope

  ■サポートサイト
    https://help.sakura.ad.jp/

  ■電話・メールによるお問い合わせ
    https://help.sakura.ad.jp/hc/ja/articles/206052622
      電話受付時間　：平日 9:45 - 18:00（土日祝、当社指定休日は休み）
      メール受付時間：10:00 - 18:00（土日祝営業、当社指定休日は休み）

───────────────────────────────────
```

さくらインターネットの会員ページに行くと、「サーバ証明書DL」ボタンがあって、無事にSSL証明書ファイルを取得できました。
server.crtというファイル名です。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/261826/32d75860-e00d-2d4e-249a-bb4389eae7d6.png)

これから、Webサーバに、SSL証明書を配備するのですが、以下の中間証明書(DV)も必要なので、以下のサイトからダウンロードしておきます。

中間証明書(DV) PEM形式のダウンロード
https://jprs.jp/pubcert/service/certificate/

JPRS_DVCA_G2_PEM.cer というファイル名です。


# Webサーバへの配備

nginxとexpressとapacheの場合を例に、SSL証明書を配備します。

(i)	nginxの場合

まずは、サーバ証明書(server.crt)と中間証明書(JPRS_DVCA_G2_PEM.cer)を連結する必要があります。
以下の感じで連結し、例えばserver_dvca.crtとします。

-----BEGIN CERTIFICATE-----
SSL証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
SSL中間証明書
-----END CERTIFICATE-----

そして、適当なフォルダに連結したファイルと公開鍵の秘密鍵(server.key)を配備し、/etc/nginx/site-enable/defaultに以下を付記します。

        listen 443 ssl default_server;
        ssl_certificate /etc/ssl/myserver/server_dvca.crt;
        ssl_certificate_key /etc/ssl/myserver/server.key;

(ii)	expressの場合

以下の感じです。

```
  var https = require('https');
  var fs = require('fs');
  var options = {
    key:  fs.readFileSync('./cert/server.key'),
    cert: fs.readFileSync('./cert/server.crt'),
    ca: fs.readFileSync('./cert/JPRS_DVCA_G2_PEM.cer')
  };
  var servers = https.createServer(options, app);
  servers.listen(port);
```

(iii)	apacheの場合

以下の感じです。

```
SSLCertificateFile server.crt
SSLCertificateKeyFile server.key
SSLCertificateChainFile JPRS_DVCA_G2_PEM.cer
```

# 最新

以下の方が安いので、乗り換えました。

FujiSSL
　https://www.fujissl.jp/

しかも、HTTPS大丈夫サイトシールも用意してくれています。

* FujiSSLのSSL証明書 の ドメイン認証シングルタイプ 1年：1100円/年 (https://www.fujissl.jp/certificate/price/)
* お名前.comドメイン 1円～/年 ※取得するドメイン名によって値段が異なります。(https://www.onamae.com/)
* AWS Route53 従量制(https://aws.amazon.com/jp/route53/pricing/)

さくらインターネットとやることは同じです。
申請すると、ファイルが送られてくるので、それを公開予定のWebサイトに配置するだけです。

以上です。