1. TOP
  2. インフラ
  3. DNSのゾーン設定を削除したあとにLet’s Encryptによる認証作業を行ったときに発生するエラーについて

DNSのゾーン設定を削除したあとにLet’s Encryptによる認証作業を行ったときに発生するエラーについて

free_ssl_lets_encryprt_1

名前解決をせずにIPアドレスだけで、Let’s Encrypt(オープンソースのSSL証明書)をドメイン名の認証はできません。当たり前のことですが。

自分はこの簡単な事実に気がつくのに丸一日かかりました。つい最近自分でDNSのゾーン設定を削除したにも関わらず、何やってんだか…orz。

“SERVFAIL looking up A for”とは

SERVFAIL looking up A for mydomainname.com

すべてはこのエラー文の意味について、よく考えることに尽きます。意味は「”mydomainname.com”のAレコードを調べてもIPアドレスを正引きすることはできません」ということになります。

# certbot --apache -d mydomainname.com

ドメイン名の認証作業をするためには、上記のcertbotコマンドが必要です。ですがDNSのゾーン設定ができていない状態で、このコマンドを実行すると2種類のエラーが出ます。

80番ポートが空いてないぞ!

Unable to find a virtual host listening on port 80 which is currently needed for Certbot to prove to the CA that you control your domain. Please add a virtual host for port 80.

IMPORTANT NOTES:
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.

「(意訳)あんたのサーバーはバーチャルホストでも使ってんのか?ドメイン認証してやるから80番ポートを使えるようにしとけや」。なのでこの注意書きに対して、

# vi /etc/httpd/conf/httpd.conf

<VirtualHost *:80>	
ServerAdmin root@mydomainname.com
DocumentRoot /var/www/html
ServerName mydomainname.com
</VirtualHost>

# systemctl restart httpd	

とApacheの設定を書きかえて、再度”certbot”コマンドを実行しました。

Aレコードを正引きしてもIPは分かりません!

# certbot --apache -d mydomainname.com
...
Failed authorization procedure. mydomainname.com (http-01): urn:acme:error:dns :: DNS problem: SERVFAIL looking up A for mydomainname.com

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: mydomainname.com
   Type:   None
   Detail: DNS problem: SERVFAIL looking up A for mydomainname.com

すると、上述した”SERVFAIL looking up A for mydomainname.com”というエラーメッセージが登場します。簡単に言えばAレコードによる正引きができないという意味ですが、より正確に表現すると「DNSSECの設定にエラーがある」ということになると思います。

Let’s Encrypt Communityコミュニティのサポートフォーラムでもそれっぽいことが書かれています。

DNSSEC(DNSセキュリティ拡張)とは

ちなみにDNSSEC(DNS Security Extentions DNSセキュリティ拡張)とは、何のことでしょうか?「標準テキスト CentOS 7」のP644に詳しく説明されていますので、引用しておきましょう。

DNSSECとは、デジタル署名による生成元の正当性とDNSデータの完全性を提供します。サーバはゾーンデータを秘密鍵で署名し、それを受け取ったクラインアントがサーバの公開鍵によって生成元の正当性とデータが改ざんされていないかどうかの完全性を検証します。

ここでいう「サーバ」とはDNSサーバのことをさし、クライアントとはDNSクライアント(当該IPアドレスが割り当てられている自分のサーバー)のことをさします。今回の場合、DNSサーバにおいてゾーンデータを削除しちゃってます。そりゃエラーも出ますわな。

もし”mydomainname.com”をSSL化したい場合は、まずDNSのゾーン設定(名前解決)が必要ということですね。