🤗

【Certbot】ワイルドカード証明書を発行するよ

2024/04/28に公開

1. コンテナ(Ubuntu)の起動

このブログではコンテナを使用しますが必須ではありません
コンテナを使わない場合は「2. certbotのインストール」から手順を実施してください

イメージをpull

ubuntuのイメージをpullします

docker pull ubuntu:24.04

pullしたイメージを確認

docker images

ubutntuが表示されていればOK

REPOSITORY   TAG     IMAGE ID       CREATED      SIZE
ubuntu       24.04   de52d803b224   3 days ago   76.2MB

コンテナの起動

先ほどpullしてきたubuntuのイメージを使って、コンテナを起動しす
分かりやすいようにcreate_certificateというコンテナ名を付けておきましょう!(つけなくてもいい)

docker run -it --name create_certificate ubuntu:24.04

bashのプロンプトが表示されていれば成功です

root@c830e30745e5:/#

2. Certbotのインストール

証明書の発行に利用するCertbotをインストールしていきましょう

そもそもCertbotとは?

Certbotは、Let's Encryptが運営する認証局を使用して、SSL証明書を手軽に取得できるサービスで、無料で利用することができます。

Certbotのインストール

インストール可能なパッケージのリストを更新します

apt update

Certbotをインストールします

apt install -y certbot

インストール中に住んでいる地域の入力が求められます
日本にお住まいなら5(Asia)を入力してEnterを押してください

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a
list of cities, representing the time zones in which they are located.

  1. Africa   3. Antarctica  5. Asia      7. Australia  9. Indian    11. Etc
  2. America  4. Arctic      6. Atlantic  8. Europe     10. Pacific

次はタイムゾーンの入力が求められるので78(Tokyo)を入力してEnterを押してください

Please select the city or region corresponding to your time zone.

  1. Aden      14. Beirut      27. Gaza         40. Karachi       53. Muscat        66. Sakhalin       79. Tomsk
  2. Almaty    15. Bishkek     28. Harbin       41. Kashgar       54. Nicosia       67. Samarkand      80. Ulaanbaatar
  3. Amman     16. Brunei      29. Hebron       42. Kathmandu     55. Novokuznetsk  68. Seoul          81. Urumqi
  4. Anadyr    17. Chita       30. Ho_Chi_Minh  43. Khandyga      56. Novosibirsk   69. Shanghai       82. Ust-Nera
  5. Aqtau     18. Choibalsan  31. Hong_Kong    44. Kolkata       57. Omsk          70. Singapore      83. Vientiane
  6. Aqtobe    19. Chongqing   32. Hovd         45. Krasnoyarsk   58. Oral          71. Srednekolymsk  84. Vladivostok
  7. Ashgabat  20. Colombo     33. Irkutsk      46. Kuala_Lumpur  59. Phnom_Penh    72. Taipei         85. Yakutsk
  8. Atyrau    21. Damascus    34. Istanbul     47. Kuching       60. Pontianak     73. Tashkent       86. Yangon
  9. Baghdad   22. Dhaka       35. Jakarta      48. Kuwait        61. Pyongyang     74. Tbilisi        87. Yekaterinburg
  10. Bahrain  23. Dili        36. Jayapura     49. Macau         62. Qatar         75. Tehran         88. Yerevan
  11. Baku     24. Dubai       37. Jerusalem    50. Magadan       63. Qostanay      76. Tel_Aviv
  12. Bangkok  25. Dushanbe    38. Kabul        51. Makassar      64. Qyzylorda     77. Thimphu
  13. Barnaul  26. Famagusta   39. Kamchatka    52. Manila        65. Riyadh        78. Tokyo

インストールが完了したら、certbotコマンドが使用できるか確認しましょう

certbot --version

バージョンが表示されればCertbotのインストール成功です!

certbot 2.9.0

3. 証明書の発行

イストールしたCertbotで証明書を作っていきましょう

今回はDNSチャレンジで証明書を発行します
--preferred-challengesオプションでdnsを指定することで、DNSチャレンジを行います

certbot certonly --manual --preferred-challenges dns

初期設定

初めて証明書を発行する場合は、緊急の更新やセキュリティ通知をするためにメールアドレスの入力が求められます(必須)
任意のメールアドレスを入力してください

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
 (Enter 'c' to cancel):

次は利用規約への同意が求められます
表示されているURLにアクセスして利用規約を確認してください
同意する場合はYを入力してEnterを押してください

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

Let's Encrypt プロジェクトの創設パートナーでる電子フロンティア財団(Electronic Frontier Foundation)からの、ニュース、キャンペーン、デジタルフリーダムを支援する方法についてメールを受信したいか聞かれます
いらないならNで行きましょう

Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

DNSチャレンジ

ついに証明書を発行したいドメインを聞かれます
今回はsuperyoshida.com*.superyoshida.comの証明書を発行します
複数のドメインを指定する場合はスペースを空けて入力します

Account registered.
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel):superyoshida.com *.superyoshida.com

TXTレコードの名前と値が表示されるので、レコードを追加します

Please deploy a DNS TXT record under the name:

_acme-challenge.superyoshida.com.

with the following value:

nIUkJ-K7V2T2oZKtdTMK9UybsKlOGj-jjHDFOC04vTE

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

レコードの追加が完了したら、レコードが正しく認識されているか確認しましょうGoogle Admin Toolbox Digを使うと簡単に、レコードの値が確認できます

追加したレコード名を入力すると、

レコードの値が表示されます

追加したレコードが正しく認識されたことを確認したら、ターミナルに戻ってEnterを押してください

もう一度TXTレコードの値が表示されます
同じレコードに値を追加してください

Please deploy a DNS TXT record under the name:

_acme-challenge.superyoshida.com.

with the following value:

wTRd_WhGcJlFajh35hCk4gcTsFjyHBW4nUAg74jZpQ0

もう一度Google Admin Toolbox Digから追加したレコードが認識されるか確認しましょう

レコードの変更が確認できたら、ターミナルに戻りEnterを押してください

これで証明書の発行は完了です!!
ファイルは/etc/letsencrypt/live/superyoshida.com/のに保存した、と書いてありますね

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/superyoshida.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/superyoshida.com/privkey.pem
This certificate expires on 2024-07-26.
These files will be updated when the certificate renews.

4. 証明書をローカルに保存する

コンテナ内に証明書ファイルがある場合は、ローカルに保存したいですよね
以下のコマンドでコピーできるのですが、、、

docker cp {コピー元のコンテナ名}:{ファイルのパス} {コピー先のパス}

実は先の手順で表示された/etc/letsencrypt/live/superyoshida.com/llコマンドで確認すると、作成された証明書はシンボリックリンクされてるんですよね

-rw-r--r-- 1 root root  692 Apr 28 18:32 README
lrwxrwxrwx 1 root root   40 Apr 28 18:32 cert.pem -> ../../archive/superyoshida.com/cert1.pem
lrwxrwxrwx 1 root root   41 Apr 28 18:32 chain.pem -> ../../archive/superyoshida.com/chain1.pem
lrwxrwxrwx 1 root root   45 Apr 28 18:32 fullchain.pem -> ../../archive/superyoshida.com/fullchain1.pem
lrwxrwxrwx 1 root root   43 Apr 28 18:32 privkey.pem -> ../../archive/superyoshida.com/privkey1.pem

なので証明書をローカルに保存したい場合は、実体がある
/etc/letsencrypt/archive/superyoshida.com/をコピー元として指定してください

docker cp create_certificate:/etc/letsencrypt/archive/superyoshida.com/ /myCertificate

まとめ

そこそこ面倒くさいですが、無料で証明書が発行できるのはうれしいですね
次は発行した証明書を使ってhttps通信を行うブログでも書くかもしれないです

Discussion