【Certbot】ワイルドカード証明書を発行するよ
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