Let's Encryptでワイルドカード証明書の取得に成功したが、無料SSL導入に失敗

セキュリティLet's Encrypt

目次一覧

 状態:未解決  閲覧数:608  投稿日:2019-01-31  更新日:2019-05-22
Congratulations!=無料SSL導入ではない / 最終的に / 失敗したと思われる原因

ワイルドカード証明書発行の前に読んでおいた方が良いと思われる記事 / 未だに分からない点 / 要点

最終的に(ワイルドカード証明書戻す前)

試した内容(失敗履歴)

今後のロードマップ

Congratulations!=無料SSL導入ではない / 最終的に / 失敗したと思われる原因

 閲覧数:100 投稿日:2019-01-31 更新日:2019-02-01 

Congratulations!=無料SSL導入ではない


苦労した際にようやく「Congratulations!」と表示されたが
・「ワイルドカード証明書」を無事取得出来ても、httpsで表示されるとは限らない
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/example.com/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/example.com/privkey.pem
  Your cert will expire on 2019-05-01. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot-auto
  again. To non-interactively renew *all* of your certificates, run
  "certbot-auto renew"
- If you like Certbot, please consider supporting our work by:

  Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
  Donating to EFF:                    https://eff.org/donate-le


403エラー発生
403 Forbidden
nginx/1.12.2


解決できない
・色々試してみたが、ネックになったのは「ファイル内容を理解できない」こと
・どうしても解決できない
# less /etc/letsencrypt/live/example.com/cert.pem
-----BEGIN CERTIFICATE-----
MIIFjDCCBHSgAwIBAgISA5qwtUL9jsP/+ms5WrsEPpwnMA0GCSqGSIb3DQEBCwUA

//中略

UTJB//xIhz1rtwkGuOUaabi9hGzXPaA7JGwthZkNb9g=
-----END CERTIFICATE-----


# less /var/log/letsencrypt/letsencrypt.log

最終的に


従来の手法へ戻すことにした

理由
・「403 Forbidden」解決できない
・ワイルドカード証明書を取得した場合、自動自動更新手続きがとても難しい(certbot renew で更新するには --manual-auth-hook オプションで認証用ホックを自前で用意する必要がある)。少なくとも現状では…

失敗したと思われる原因


未確認だが、もし仮にもう一度試すとすれば以下の点に気を付ける

通常であれば
・example.com と *.example.com の証明書を 取得する

私が試した方法
・example.com と *.example.com と example.net と *.example.net と example.co.jp と *.example.co.jp の証明書を 取得した

たくさん取得した理由
・一度に取得した方が処理が楽だと思った
・「ワイルドカード証明書&https化」がこんなにも難しいとは思わなかった

やっぱり関係ないのかも
・最終的に「Congratulations!」と表示されたので、やっぱり関係ないのかもしれない

# less /etc/letsencrypt/live/example.com/README
This directory contains your keys and certificates.

`privkey.pem`  : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem`    : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem`     : will break many server configurations, and should not be used
                without reading further documentation (see link below).

WARNING: DO NOT MOVE OR RENAME THESE FILES!
        Certbot expects these files to remain in this location in order
        to function properly!

We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.


ワイルドカード証明書発行の前に読んでおいた方が良いと思われる記事 / 未だに分からない点 / 要点

 閲覧数:119 投稿日:2019-01-31 更新日:2019-02-01 

ワイルドカード証明書発行の前に読んでおいた方が良いと思われる記事


どの記事もサラッと流しているけれども
・実際にやってみると結構面倒な作業
・DNS変更反映まで待たなければいけない
・反映待たずに試した場合はどうなるか、など
・軽い気持ちで試すと、ハマるかも

CertbotでLetsencryptワイルドカード証明書を発行してみる

未だに分からない点


ワイルドカード証明書
・複数発行できるの?
・その際の設定など

TXTレコードが反映される前に『Press Enter to Continue』を押すとどうなるの?
Before continuing, verify the record is deployed.
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)

   To fix these errors, please make sure that your domain name was
entered correctly and the DNS A/AAAA record(s) for that domain
contain(s) the right IP address.


お名前.com
・DNS機能の設定画面でホスト名欄に _acme-challenge 、TYPEをTXT、VALUEにはコピーした値を張り付けて追加設定をする
・_acme-challengeを2回入力する際、同じホスト名はダメ、と言われる場合と、問題なく出来るときがある

要点


--preferred-challenges dns-01
・DNS-01方式
・TXTレコードで認証を行う指定
・TXTレコードにLet’s Encryptの方から発行される認証のための文字列を設定して、適切なTXTレコードを引くことができれば認証をパスできるという仕組みで認証

--server https://acme-v02.api.letsencrypt.org/directory
・環境のエンドポイント(認証サーバ)を指定
・ワイルドカード証明書に対応しているACME v2 エンドポイントを利用するために明示的に指定

NSLOOKUPでDNS登録がホントに上手くいっているのか確認する

最終的に(ワイルドカード証明書戻す前)

 閲覧数:125 投稿日:2019-01-31 更新日:2019-02-01 

最終的に(ワイルドカード証明書戻す前)


a.example.com
・従来からある(一番最初に設定)

g.example.co.jp
・今回設定した内容
・confファイルの日本語コメント削除する前
・「UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 12: ordinal not in range(128)」エラーが表示される段階
・番号選択したら設定できたが、上記影響で意図した(入力した)番号とは異なるサイトがhttps化された

p.example.com
・今回設定した内容
・confファイルの日本語コメント削除した後
・番号選択して設定。意図した(入力した)番号のサイトがhttps化された

example.com
・今回設定した内容
・コマンド実行後に「Congratulations!」と表示されたワイルドカード証明書
・「403 Forbidden」エラーを解決できず、https化には失敗

# ls -l /etc/letsencrypt/live/
合計 4
-rw-r--r-- 1 root root 740  2月  1 08:55 README
drwxr-xr-x 2 root root  88 12月 19 01:50 a.example.com
drwxr-xr-x 2 root root  88  2月  1 10:27 g.example.co.jp
drwxr-xr-x 2 root root  88  2月  1 11:34 p.example.com
drwxr-xr-x 2 root root  88  2月  1 08:55 example.com


# ls -l /etc/letsencrypt/live/example.com
合計 4
-rw-r--r-- 1 root root 692 2月 1 08:55 README
lrwxrwxrwx 1 root root 32 2月 1 08:55 cert.pem -> ../../archive/example.com/cert1.pem
lrwxrwxrwx 1 root root 33 2月 1 08:55 chain.pem -> ../../archive/example.com/chain1.pem
lrwxrwxrwx 1 root root 37 2月 1 08:55 fullchain.pem -> ../../archive/example.com/fullchain1.pem
lrwxrwxrwx 1 root root 35 2月 1 08:55 privkey.pem -> ../../archive/example.com/privkey1.pem


試した内容(失敗履歴)

 閲覧数:137 投稿日:2019-01-31 更新日:2019-04-18 
$ git clone https://github.com/certbot/certbot.git
Cloning into 'certbot'...
remote: Enumerating objects: 54, done.
remote: Counting objects: 100% (54/54), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 62241 (delta 19), reused 25 (delta 12), pack-reused 62187
Receiving objects: 100% (62241/62241), 20.40 MiB | 4.82 MiB/s, done.
Resolving deltas: 100% (45249/45249), done.
Checking out files: 100% (1253/1253), done.

$ cd certbot/
$ ./certbot-auto certonly --manual \
> -d *.example.com -d example.com \
> -d *.example.net -d example.net \
> -d *.example.co.jp -d example.co.jp \
> -m ●●3@yahoo.co.jp \
> --agree-tos \
> --manual-public-ip-logging-ok \
> --preferred-challenges dns-01 \
> --server https://acme-v02.api.letsencrypt.org/directory
Requesting to rerun ./certbot-auto with root privileges...
[sudo] password for ★★:
Another instance of Certbot is already running.


$ ./certbot-auto renew
Requesting to rerun ./certbot-auto with root privileges...
Another instance of Certbot is already running.

$ ps -ef | grep certb
$ kill 9614
$ ps -ef | grep certb
$ kill 9617
-bash: kill: (9617) - 許可されていない操作です

$ sudo kill 9617
$ ps -ef | grep certb

$ ./certbot-auto certonly --manual -d *.example.com -d example.com -d *.example.net -d example.net -d *.example.co.jp -d example.co.jp -m ●●3@yahoo.co.jp --agree-tos --manual-public-ip-logging-ok --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory
Requesting to rerun ./certbot-auto with root privileges...
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator manual, Installer None
Obtaining a new certificate
Performing the following challenges:
dns-01 challenge for example.com
dns-01 challenge for example.com
dns-01 challenge for example.co.jp
dns-01 challenge for example.co.jp
dns-01 challenge for example.net
dns-01 challenge for example.net

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

AAbAd1vQmstobQ32T_UlHls7qibRb83wh6phWGSJt0E

Before continuing, verify the record is deployed.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Please see the logfiles in /var/log/letsencrypt for more details.


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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name
_acme-challenge.example.net with the following value:

C98uMN0lWyUOTQKYAK_nDoyb1m5LmGGFfWjlCDTt-18

Before continuing, verify the record is deployed.
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)

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

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



Let's Encryptでワイルドカード証明書発行してみた
“Action required: Let’s Encrypt certificate renewals”というメールがきたのでLet’s Encryptを”certbot renew –dry-run”コマンドでACME v2にする #letsencrypt

「Congratulations!」表示後、修正する前の記述
# less /etc/nginx/conf.d/default.conf
server {
   listen       80 default_server;
   server_name  localhost;
   root   /usr/share/nginx/html;
   index index.php index.html index.htm;

   #charset koi8-r;
   #access_log  /var/log/nginx/host.access.log  main;

   location ^~ /.well-known/acme-challenge/ {
       root /var/www/acme-challenge;
   }

   location / {
       #root   /usr/share/nginx/html;
       #index  index.html index.htm;
       try_files $uri $uri/ /index.php?$query_string;
   }

   #error_page  404              /404.html;

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
       root   /usr/share/nginx/html;
   }

   # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   #    proxy_pass   http://127.0.0.1;
   #}

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
/etc/nginx/conf.d/default.conf...skipping...
server {
   listen       80 default_server;
   server_name  localhost;
   root   /usr/share/nginx/html;
   index index.php index.html index.htm;

   #charset koi8-r;
   #access_log  /var/log/nginx/host.access.log  main;

   location ^~ /.well-known/acme-challenge/ {
       root /var/www/acme-challenge;
   }

   location / {
       #root   /usr/share/nginx/html;
       #index  index.html index.htm;
       try_files $uri $uri/ /index.php?$query_string;
   }

   #error_page  404              /404.html;

   # redirect server error pages to the static page /50x.html
   #
   error_page   500 502 503 504  /50x.html;
   location = /50x.html {
       root   /usr/share/nginx/html;
   }

   # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   #    proxy_pass   http://127.0.0.1;
   #}

   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #
   #location ~ \.php$ {
   #    root           html;
   #    fastcgi_pass   127.0.0.1:9000;
   #    fastcgi_index  index.php;
   #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
   #    include        fastcgi_params;
   #}
   location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
   }

   # deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #
   #location ~ /\.ht {
   #    deny  all;
   #}
}


dns-pluginを書き換えなければいけない


$ sudo certbot -a --preferred-challenges dns-01 -i nginx -d "*.example.com" -d example.com -d "*.example.net" -d
example.net -d "*.example.co.jp" -d example.co.jp --server https://acme-v02.api.letsencrypt.org/directory
Saving debug log to /var/log/letsencrypt/letsencrypt.log
The requested dns-plugin plugin does not appear to be installed


If you want to obtain a wildcard certificate using Let's Encrypt's new ACMEv2 server, you'll also need to use one of Certbot's DNS plugins. To do this, make sure the plugin for your DNS provider is installed using the instructions above and run a command like the following:
・Let's Encryptの新しいACMEv2サーバーを使用してワイルドカード証明書を取得したい場合は、CertbotのDNSプラグインの1つを使用する必要もあります。 これを行うには、上記の手順を使用してDNSプロバイダのプラグインがインストールされていることを確認し、次のようなコマンドを実行します。


今後のロードマップ

 閲覧数:118 投稿日:2019-05-22 更新日:2019-05-22 

今後のロードマップ


nginxプラグインで自動更新できることを確認

nginxプラグインで自動更新できたら?
・お名前.comのDNSをスクリプトで書き換えできることを確認

「ワイルドカード証明書」を自動更新するためには?
・DNS自動書き換えが必要
→ 使用しているDNS環境に依存

お名前.comでは?
・DNS自動書き換えすることは多分できない


2019/1/28「Action required: Let's Encrypt certificate renewals」メール受信

Let's Encrypt 試行錯誤履歴 2019年4月



週間人気ページランキング / 9-16 → 9-22
順位 ページタイトル抜粋 アクセス数
1 Nginx設定。エラーログレベル | Nginx(Webサーバ) 19
2 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 14
3 PHPのmb_send_mail関数でメール送信できない | メール処理システム 13
4 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 12
5 touch コマンド / viコマンド。新規ファイル作成時の違い | Linuxコマンド 8
6 ソースからビルドしたPython 2.7.3 アンインストール失敗 | Python(プログラミング言語) 7
6 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 7
6 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 7
6 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 7
6 manページ日本語表示 | CentOS 7 (CentOS) 7
6 PHPファイルでchmodエラー | PHP(プログラミング言語) 7
7 ABRT により 問題が検出されました | CentOS 7 (CentOS) 6
7 Python 3.6 インストール / make altinstall | Python(プログラミング言語) 6
7 さくらVPS0 6
8 Reached target Shutdown メッセージが表示されたあと、シャットダウンまたは再起動プロセスがハングアップする | CentOS 7 (CentOS) 5
9 PHP Version 7.1.2 php-mecabエクステンション対応 / PHP 7.0.14 からのアップグレード  | MeCab(形態素解析) 4
9 echo と cat の違い 4
9 phpMyAdmin 4.4.3(phpMyAdmin) カテゴリー 4
9 tar: これは tar アーカイブではないようです 4
9 MySQL 5.5 から 5.6 へのアップグレード | MySQL(データベース) 4
2021/9/23 1:01 更新