Vultr VPSで無料でhttps（SSL証明書）を使いたい

# はじめに
VultrのVPSでサーバー費用を安くできてもほとんどのブラウザではhttpsが使えないと警告表示されて信頼度が著しく低下してしまうのでSSLを使いたいが、SSLは高い。そこで無料SSLであるZeroSSLを試してみた。Let's Encryptの方が有名ですが、手続きがちょっと面倒くさい印象で、私はZeroSSLの方がブラウザだけで手続きが終わるので楽だと思います。


激安VPSの[Vultr](https://www.vultr.com/?ref=8478497)で[紹介者からのリンク](https://www.vultr.com/?ref=8478497)経由でアカウント登録すると＄100のクレジットをもらえるので、CentOS7, 8, MySQL 5.7, 8などの組み合わせをいろいろ試しました。このキャンペーンはいつ終わるか分からないので、興味のある方は以下のリンクからアカウント登録してください。あなたはクレジットをもらえるし、私にも多少のクレジットが入るらしいので、Win-Winです。

### [**このリンク**](https://www.vultr.com/?ref=8478497)で＄100もらえます
![スクリーンショット 2020-03-09 午後7.03.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/f3fb7f23-feb3-e19f-e0c3-0ee7ff8f6e81.png)

私もリファラー経由でアカウントを作ったので＄100もらえました。これで最初にあれやこれや試すのは無料でできます。
![スクリーンショット 2020-03-09 午後7.17.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/527634e5-40b0-1fac-ecc2-6e3fe7db41b5.png)


# 1. ZeroSSLでSSL証明書を取得
## (1) 無料版SSL申込のサインアップ
メールアドレスとパスワードを設定するだけ。
![スクリーンショット 2022-09-05 午後8.48.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/0deb469d-10f8-9636-4bd1-ae359ff24d62.png)
![スクリーンショット 2022-09-05 午後8.49.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/390d8e0f-70ac-e47d-f7b4-85ee28f6191f.png)


## (2) SSL証明書を申し込む
![スクリーンショット 2022-09-05 午後1.44.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/553cca29-7d3b-0316-959a-32c8c28a5416.png)

自分のドメインを指定するとwww無しと有りが自動的に出る。どうやら、`hogehoge.com`と`www.hogehoge.com`のようにサーバー名としては`www`しか指定できないらしいが、ほとんど場合は`www`でしょうから問題無いでしょう。任意の名前やドメイン全体に有効なSSL証明書は有償サービスになっています。
![ZeroSSL002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/aa9099f5-c25a-4fe0-0d16-23447206f65d.png)

無料で使える90日を選択する。
![スクリーンショット 2022-09-05 午後1.45.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/facc5c99-e807-a7e4-390f-834a40872f44.png)

ドメイン情報を自動取得させて自分で入力しなくて済むように指定する。
![スクリーンショット 2022-09-05 午後1.46.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/9d13be27-91f1-067f-8476-680a641546aa.png)

無料を選択する。
![スクリーンショット 2022-09-05 午後1.47.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/3423543e-887e-ca14-d9da-0ab86599ae08.png)

ドメインの所有者かどうかを確認するが、Emailが一番楽なので選択した。ただし、`admin@あなたのドメイン`のメールアドレスが有効である必要がある。
![ZeroSSL003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/4f2c54a5-bba8-55dd-4575-c104eeed657e.png)

`Verify Domain`ボタンを押すと確認メールが前の画面で指定したメールアドレスに届く。!
![ZeroSSL004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/7ae5f390-0ed4-8085-4c67-ce61d80b3152.png)

![ZeroSSL005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/61973408-5a20-02f9-9b6f-12f413f54009.png)

メールが来たら`Go To Verification Page`リンクをクリックする。
![ZeroSSL006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/3246ab94-f70f-02b5-763d-a30e40275016.png)

メールに記載されているVerification Codeを入れる。
![ZeroSSL007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/2d5b99ae-2ca2-1e16-864f-88c29c571ade.png)
![スクリーンショット 2022-09-05 午後2.03.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/f01ca600-264a-b73e-d969-5fe3d7c3f943.png)

ドメイン所有の確認が終わったら、SSL証明書発行手続きに進む。
![ZeroSSL008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/722d6053-d85d-fcb5-dba1-b811f884eb1b.png)

WebサーバーはNginxなので`Server Type`に指定して`Download`ボタンを押すとSSL証明書がダウンロードできる。
![ZeroSSL009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/e282b005-4b69-f6fa-8470-f36f3893c001.png)

以下の画面になったら、SSL証明書をVPSのNginxで使えるように設定する。（2.に記載の手順）
![ZeroSSL010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/8277cbc0-d21e-afcc-ede0-f26b8c2b6d97.png)


# 2. SSL証明書をVultr VPSのNginxに入れる

```ruby:Macからscpで証明書をVultrにコピー
$ scp -i ~/.ssh/vultr certificate.crt deploy@あなたのVPSのIPアドレス:/var/www/myapp/
$ scp -i ~/.ssh/vultr private.key deploy@あなたのVPSのIPアドレス:/var/www/myapp/
```

```ruby:/etc/sslに移動
[deploy@vultr myapp]$ sudo mv certificate.crt /etc/ssl/
[deploy@vultr myapp]$ sudo mv private.key /etc/ssl/
[deploy@vultr myapp]$ cd /etc/ssl
[deploy@vultr ssl]$ chmod 644 certificate.crt
[deploy@vultr ssl]$ sudo chown root.root certificate.crt
[deploy@vultr ssl]$ ls -l
total 4
-rw-r--r--. 1 root root 2305 Sep  5 18:40 certificate.crt
```

[Installing SSL Certificate on NGINX](https://help.zerossl.com/hc/en-us/articles/360058295894-Installing-SSL-Certificate-on-NGINX)の手順に従ってNginxでSSLを有効化する。

```ruby:/etc/nginx/nginx.conf
# Settings for a TLS enabled server.
#
    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  www.あなたのドメイン;
        root         /usr/share/nginx/html;

        ssl_certificate "/etc/ssl/certificate.crt";　＜＝ここを修正
        ssl_certificate_key "/etc/ssl/private.key";　＜＝ここを修正
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }
```

ZeroSSLの画面で`Check Installation`ボタンを押すとSSLが有効になっているか確認して結果が出る。
![ZeroSSL010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/2dfe11f2-d63a-f62d-cd5c-26056d60891d.png)

![ZeroSSL011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/d26c72ef-d758-d445-6b09-baa5fc668b76.png)

以上で作業完了ですが、ブラウザから`https://あなたのサーバー`でアクセスしてSSL接続されているか確認して終わりです。当然ながら、あなたのVultr VPSサーバーのIPアドレスがDNSであなたのドメインのアドレスとして名前解決できる必要があります。

# 3. 90日ごとにSSL証明書を更新する
無料のSSL証明書の有効期限は90日なので、90日ごとに毎回証明書を取得するか自動更新の仕組みを構築する。ZeroSSLのダッシュボードで有効期限が確認できるので、残り少なくなったら新しいSSL証明書を取得してNginxに入れる。以下の手順でキャンセルすると無料プランが使えるようになる。

![ZeroSSL012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329289/2dbfcce7-e57b-a800-f9b8-5c397ca7538f.png)

### Tips
SSL証明書を更新する時に無料プランが選択できなくなっていた場合はPending Validationステータスになっている証明書がないかどうか確認する。これがあるとQuota数に数えられてしまって無料プランの上限に達して更新できなくなってしまう場合がある。

[Cancelling an SSL Certificate](https://help.zerossl.com/hc/en-us/articles/360058295514-Cancelling-an-SSL-Certificate)

# 4. 無料再更新の回数制限
Google検索で見つかる古いZeroSSLの記事では回数無制限に永久に無料で使えそうな記述のものが多いが、実際には同一ドメインの更新は3回までという制限がある。これ以降は有料プランにする必要がある。サポートの問い合わせたので間違い無いです。

```ruby:ZeroSSLサポートからの回答
Thank you for reaching out to ZeroSSL.

To clarify, on the Free Plan, you can create 3x independent 90-day certificates for different domains or create one 90-day certificate for one domain and renew it two times.

Please see how our quota is calculated:

👉 How Is the Quota Calculated?
 
I hope this clarifies.
 
Best regards,
******
ZeroSSL Customer Success
```
[How Is the Quota Calculated?](https://help.zerossl.com/hc/en-us/articles/360060119713-How-Is-the-Quota-Calculated-?source=search&auth_token=eyJhbGciOiJIUzI1NiJ9.eyJhY2NvdW50X2lkIjoxMDQzMzk2MywidXNlcl9pZCI6NDI5Mjk5NjExODkzLCJ0aWNrZXRfaWQiOjEwMjEwNywiY2hhbm5lbF9pZCI6NjMsInR5cGUiOiJTRUFSQ0giLCJleHAiOjE2MTM3MjYzNTl9.BoIGponMOYPTfavt77qW9R9Ir5jfyUA6VG0dieWkPXk)

# 5. 終わりに
趣味でサーバーを持ちたいとか、ちょっとした個人事業程度のビジネスアイデアでサーバー構築するような時は初期費用を限りなく小さくしたいので、SSLを無料で使えるのはうれしい。ビジネスが成長して利益がでるようになってから有償サービスを使ったり、サーバー負荷が高くなったらAWSに移行すれば良いと思います。

# 参考記事
[無料の SSL 証明書が得られる ZeroSSL を使ってみた](https://zenn.dev/mattn/articles/b2c4c92c9116b1)
[ZeroSSL（ゼロエスエスエル）についてまとめ](https://balloon.asia/zerossl)
[ZeroSSLの証明書を無制限にcert-managerで発行する](https://tech.griphone.co.jp/2020/12/21/zerossl-with-cert-manager/)
[Installing-SSL-Certificate-on-NGINX](https://help.zerossl.com/hc/en-us/articles/360058295894-Installing-SSL-Certificate-on-NGINX)
[Cancelling an SSL Certificate](https://help.zerossl.com/hc/en-us/articles/360058295514-Cancelling-an-SSL-Certificate)