GoGetSSLでドメイン認証をとる

2019年5月1日

Nextcloudを動かしているCentOSサーバーのドメイン認証はLet’s Encryptを使っていたんですが、Certbotがうまく動かなくなって証明書の更新ができなくなりました。

ちょっと調べてみたもののよくわからず期限切れが迫ってきたので他の証明書を探してみました。このサイト自体は日本の代理店から購入したFuji SSLを使っていますが、海外のものを探してみたところGoGetSSLのGGSSLというのが2年で7.76USDと格安だったのでこれを使うことにします。

メールの取得設定

今回もメール認証をします。対象ドメインの規定メールアドレスでインターネットメールが受信できるようにしておきます。規定のアドレスは以下のとおり。

  • admin@example.com
  • administrator@example.com
  • hostmaster@example.com
  • webmaster@example.com
  • postmaster@example.com

他にwhois情報に登録しているメールアドレスも使えます。

鍵ペアとCSRの生成

まずはopensslを使ってCSR生成時に登録する秘密鍵ファイルを作ります。一旦パスフレーズはちゃんと指定します。

# openssl genrsa -des3 2048 > www.example.com.key
Generating RSA private key, 2048 bit long modulus
..........+++
...+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

つづいて秘密鍵ファイルをもとにCSRを生成します。なお、この時FujiSSLのようにSANs対応の処理をする必要はないようです。GGSSLはwwwサブドメイン付きのurlをドメイン認証すると自動的にwwwなしのurlも含まれるようです。

# openssl req -new -key www.example.com.key -out www.example.com.csr -sha256
Enter pass phrase for www.example.com.key:
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
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Nerima-ku
Organization Name (eg, company) [Default Company Ltd]:Example
Organizational Unit Name (eg, section) []:Example
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:

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

CSRファイルができたら秘密鍵のパスフレーズを解除しておきます。そうしないとWebサーバーが秘密鍵を読み込むたびにパスフレーズを入力しなくてはなりません。

# nginx -t
Enter PEM pass phrase:
Enter PEM pass phrase:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -s reload
Enter PEM pass phrase:
Enter PEM pass phrase:

opensslを使ってパスフレーズを解除しましょう。

# openssl rsa -in www.example.com.key -out www.example.com.key
Enter pass phrase for www.example.com.key:
writing RSA key

証明書購入

GoGetSSLのトップページを下へスクロールすると、「Cheap SSL certs」の項目があるのでこれをクリックします。

格安SSL購入画面

幾つかのリストが出てきます。無料のものは多分数ヶ月のお試し版と思われますが、よくわかりません。今回はGGSSLの3.88USDのものを選択。

SSL価格一覧

実際に年間3.88USDになるのは2年分買ったとき。1年分は4.45USDです。それでも安い。どちらかを選んで「Buy SSL Certificate」ボタンを押します。

SSL選択画面

内容をもう一度確認して「Next Step」ボタンを押します。

有効期間選択画面

購入にはアカウントが必要なので「Create new account」ボタンで新規作成しました。

アカウント作成画面

アカウント名はメールアドレス。パスワードを決めて個人情報を登録します。

メールアドレスとパスワードの入力
アカウント情報の入力

支払い方法を指定して「Complete Oder」ボタンを押すとログイン画面に遷移するので、メールアドレスとパスワードを入力して処理を続けます。

支払い方法の選択画面
ログイン画面

SSL Certificates画面を開くと先程注文したリストが出てくるので、「View」ボタンを押します。Order StatusはIncompleteですね。

SSL証明書リスト

「Generate Certificate」ボタンを押してOrder TypeとWeb Server Softwareが適切であることを確認してからPaste your CSRにCSRの内容を貼り付けて「Validate CSR」ボタンを押します。

CSR生成画面
CSR検証画面

Select Validation Method画面で適切にメールアドレスを設定して「Next Step」ボタンを押すと、指定のアドレスにメールが届きます。

検証方法の選択
検証コード連絡メール

メールに記載されているurlにアクセスすると、Administrative Contactの入力画面に遷移します。すべて記入してSubscriber Agreementに同意のチェックを入れたら「Complete Generation」ボタンを押します。

管理者情報入力画面
証明書ファイル完成

証明書が出来上がったら「Continue to SSL Management」ボタンを押してValidation codeを入力します。Validation codeは先程のurl記載メールに書いてあります。

SSL証明書完成
検証コード入力画面

おめでとうございます。無事に証明書が発行されました。証明書はGoGetSSLのアカウントに使用したメールアドレス宛に添付ファイルで送られてきます。

検証完了画面

間違えたときは。。。

なんでこんな情報があるかというと、実際に間違えて証明書を発行してしまったから。CSR生成時の国コード指定でJAって指定しちゃった!正しくはJPね。

サポートに「CSR貼り替えたいんだけど」ってチケット送ったら「それは無理」との回答。一旦オーダーをキャンセルして新しく作り直してくれと。…なにこの既視感。なんかFujiSSLのときも同じことした気がする。。。

********Dear xxx,

Unfortunately, it is not possible to restore the rejected order.
Kindly cancel this one and place the new instead

Please follow these steps to cancel the order:
1. Go to “SSL Certificates”;
2. View order details;
3. Click the “Cancel Order” button;
4. Put the reason for cancellation.

Once done, our managers will review the request within 1 – 3 hours. Refunded funds will appear on your balance immediately.

Refund Policy details:
https://www.gogetssl.com/refund-policy/

Please let us know if further assistance is required…

Best Regards,

というわけでサポートのAnastasijaのお陰でどうにか危機を脱しました。

証明書ファイルを設置する

証明書の設置はFuji SSLやLet’s Encryptと同じなので余裕!と思っていたら証明書ファイルが3つも入っていました。

  1. www_example_com.crt
  2. USERTrust_RSA_Certification_Authority.crt
  3. AddTrust_External_CA_Root.crt

秘密鍵は自分で作ったもの(先程パスコードを削除したもの)なのでいいとして、証明書ファイルはどれを使えばいいんだ?

結論から言うと上記ファイルを1から順に結合したものをwww.example.com.crtとすればよし。ただし各ファイルはたまに最終行に改行が入っていないので、単純なcatではダメです。各ファイルの最初と最後のコメント行がくっつかないようにしましょう。

-----END CERTIFICATE----------BEGIN CERTIFICATE-----

こういうのはダメ。

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

ちゃんと分離してね。

秘密鍵はCSR作成時に用意したのちにパスフレーズを解除しておいたもの。それぞれnginx.confの適切な場所に指定します。

ssl_certificate         /etc/ssl/www.example.com.crt;
ssl_certificate_key     /etc/ssl/www.example.com.key;

これで2年間は安泰です。