ConoHa VPS割引きっぷの無料SSL証明書を使ってみる

この記事は、[ConoHa Advent Calendar 2022 14日目](https://qiita.com/advent-calendar/2022/conoha)の記事です。
今回は「VPS割引きっぷ」の隠れ特典となる無料SSLサーバー証明書を発行してみます。

# 「VPS割引きっぷ」の隠れた特典

公式サイトを見ていたら何やら気になる内容を発見

[独自SSL｜VPSならConoHa](https://www.conoha.jp/vps/function/ssl/)
> VPS割引きっぷの契約中はアルファSSLが永久無料！

アルファSSL？と読み進めてみると、なんとHTTPSに使用するSSLサーバー証明書のことでした。
発行できる証明書はGMOグローバルサインので通常は6600円/年するちゃんとしたやつです。

**それが「VPS割引きっぷ」の契約中は無料**

しかもきっぷ１枚に１つではなく、きっぷ１枚で何個も発行可能！！（もちろん常識の範囲内ですよ）
これは試してみるしかない！ということで証明書の発行からウェブサーバーに設定までやってみます！

ちなみに訓練された ConoHa 利用者なので「VPS割引きっぷ」は当然持っています。
不定期にキャンペーンをしているのでそのタイミングで買うとさらにめっっっっちゃお得

# 目次

1. CSRの生成
1. 証明書の発行
1. 証明書の設定
1. 動作の確認

## CSRの生成

秘密鍵と、発行対象のドメイン情報などをまとめたCertificate Signing Request（CSR）を生成します。
証明書はCSRに設定したドメイン専用に発行されるのでtypo注意

CSRの生成はOpenSSLが利用できる環境ならどこでも良いですが、一緒に生成する秘密鍵はウェブサーバーに設定するのでウェブサーバー上で実行すると移動の手間が省けて楽です。

```:秘密鍵の生成
$ openssl genrsa -out ssl.cloudremix.net.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
........................................................................................+++++
.......................................................+++++
```

```:CSRの生成
$ openssl req -new -key ssl.cloudremix.net.key -out ssl.cloudremix.net.csr
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) [XX]:JP    # 国名コード（日本はJP）
State or Province Name (full name) []:Tokyo    # 都道府県
Locality Name (eg, city) [Default City]:Minato-ku    # 市区町村
Organization Name (eg, company) [Default Company Ltd]:Example Company    # 組織名
Organizational Unit Name (eg, section) []:Example Team    # 部署名
Common Name (eg, your name or your server's hostname) []:ssl.cloudremix.net    # 使用するドメイン
Email Address []:example@example.com    # メールアドレス
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
```

成功したら２つのファイルが作成されます。ちなみに設定するドメインなどは適切な値に置き換えてください（念のため）

 - `ssl.cloudremix.net.key`：秘密鍵
 - `ssl.cloudremix.net.csr`：CSR

## 証明書の発行

作成したCSRを使って無料SSL証明書を発行します。
ConoHa にログインして「セキュリティ」の中の「SSL」を開きます。
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-TOP-Menu.jpg)


右上の「SSL」
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-New-Cert.jpg)

発行するSSLサーバー証明書の種別や契約期間、認証方法を選択します。

無料で発行できるのはドメイン認証タイプ「アルファSSL」で契約期間は１年固定です。
認証方法は「DNS認証」「メール認証」「ページ認証」から選べますが、こだわりはないので推奨らしい「DNS認証」を選択

![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Plan.jpg)

最初に用意したCSR（`cat ssl.cloudremix.net.csr`）を開いて左側のテキストボックスに丸っとコピペします。
暗号ぽくて心配になりますが次の画面で確認できるのでサクサク進めます。
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-CSR.jpg)

CSRの中身、特に発行対象のドメイン（コモンネーム）に間違いがないことを確認
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-CSR-Info.jpg)

証明書の発行者情報を入力します。
場合によっては、このはちゃんから確認のラブコール（ラブメール？）が届くらしいので正確な値を入力しましょう。
ちなみに、CSRの発行時のメールアドレスに合わせる必要はないようです。
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Contact.jpg)

確認画面
しつこいですがコモンネームに間違いがないか、もう一度確認して次に進めます。
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Check.jpg)

料金確認
VPS 割引きっぷ利用中で最初のプラン選択を間違っていない限りは`0円`になっているはずです。
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Application.jpg)

最後にドメインの所有者確認です。
今回はDNS認証を選んだので設定するTXTレコードの値を表示されています。この値をドメインを管理しているDNSサーバーに設定します。設定が終わったら認証依頼を行います。
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Auth.jpg)

Cloudflareの場合
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-CloudFlare.jpg)

特に問題がなければ発行手続き完了です。
発行された証明書は次の画面でゲットできます
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Complete.jpg)

「SSL」のページに戻ると申請した証明書が追加されています。
右上の「証明書」を選択
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Menu.jpg)

３種類あるように見えますが実質２種類で Apache/nginx で使うなら上２つを使用
（中間証明書はなくても動きますがトラブルになるのでいれましょう）
![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Certificate-Selection.jpg)

種類を選んで→「はい」を２回繰り返します（中間証明書と証明書）
「はい」を選んだ時点でファイルがダウンロードされて手元に２つのファイルがあるはずです。両方使うので無くさないように注意

 - `ssl.cloudremix.net(ICA).txt`：中間証明書
 - `ssl.cloudremix.net(PEM).txt`：証明書

![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Credentials-Download.jpg)


## 証明書の設定

ここからはウェブサーバーに証明書を設定する手順となります。
今回は CentOS Stream 9 に nginx を入れます。

![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Create-VPS.jpg)


SSH で繋いで nginx のインストールとファイアウォールに穴を開けます。

```
firewall-cmd --permanent --add-port={80/tcp,443/tcp}
firewall-cmd --reload
dnf -y install nginx
systemctl start nginx
```

秘密鍵をてきとうな場所に置きます。
今回は雑に nginx の config 配下に置いていますが漏れると大惨事になるのでご注意ください。（**秘密**鍵ですからね）

```
mv ssl.cloudremix.net.key /etc/nginx/conf.d/
```

次に発行した証明書と中間証明書を**一つのファイルに**コピペ
面倒な感じですが単純に証明書を丸っとコピペしたあとに、その下に中間証明書もコピペするだけです。
※上下の`CERTIFICATE`はそのままでOKです


```
$ vi /etc/nginx/conf.d/fullchain.pem

-----BEGIN CERTIFICATE-----
// 証明書 //
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
// 中間証明書 //
-----END CERTIFICATE-----
```

後は`/etc/nginx/nginx.conf`を HTTPS 版に書き換えます。

```
vi /etc/nginx/nginx.conf
```

<details><summary><strong>こちらを丸っとコピペ（クリックで表示）</strong></summary><div>

```:nginx.conf
user              nginx;
worker_processes auto;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  2048;
    multi_accept on;
    use epoll;
}
http {
    include       /etc/nginx/mime.types;
    access_log  /var/log/nginx/access.log;
    keepalive_timeout 5;
    client_max_body_size    7m;
    server_tokens     off;
    server_name_in_redirect off;
    index index.html index.php;

    server {
        listen 443 ssl http2;
        ssl_certificate /etc/nginx/conf.d/fullchain.pem;
        ssl_certificate_key /etc/nginx/conf.d/ssl.cloudremix.net.key;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets off;

        server_name  ssl.cloudremix.net;
        root         /usr/share/nginx/html;
    }
}
```

</div></details>

修正が終わったら再起動

```
systemctl reload nginx
```

## 動作の確認

てきとうに DNS の Aレコードをウェブサーバーに向けてブラウザからアクセス

ぱっと見はなんも変わりませんが🔓マークの証明書ビューワを表示すると、グローバルサインの証明書が使用されていることが確認できます。

![alt](https://qiita-image.cloudremix.net/ConoHa-FreeSSL-Browser.jpg)

# あとがき

Let's Encrypt や Cloudflare のおかげでSSL証明書を買う機会も減ってきましたが、まだまだサイトによっては通常の有料SSL証明書が必要なことがあります。

「VPS割引きっぷ」の契約中は無料という大盤振る舞いなので、ホルダーの方は活用していきましょう。

ちなみに、去年は[このはちゃんカレンダー会社で使ってます（隠れて）](https://qiita.com/CloudRemix/items/deb27e7e4bd660e701ad#%E3%81%82%E3%81%A8%E3%81%8C%E3%81%8D)と書きましたが新しい上司の壁紙が このはちゃんだったので堂々と使えるようになりました。~~赤信号みんなで渡れば怖くない~~