まいどどーも
今日、職場のおねーさんから「Let'sEncryptでアンダースコアを使ったFQDNが通らない」という問い合わせがありまして。
そういえばkusanagiコマンド側には厳密なFQDNのチェックは実装されてないなー、と思って、Let'sEncryptのソースコード読んでみました。
2016.05.09追記
みんめもの中のおねーさん、引用ありがとーございます。(謝
hatsune.3939(TLDに数字は使えません)
nyanpasu-.com(ドメイン名の前後にハイフンは使えません)
192.168.0.1(IPアドレスはFQDNではありません)
localhost(TLDのみのFQDNは使えません)
Requested domain is not a FQDN
https://community.letsencrypt.org/t/requested-domain-is-not-a-fqdn/8112
「RFC1123で定義されてる文字しか使えないよ!」
注)RFC1123日本語訳はこちら
・・・はい、ごもっともです。
ななめ読みしましたが、やはりアンダースコアはFQDNを表現する要素としては含まれていません。 ・・・結果、RFCよりLet'sEncryptの要件の方が、まだ緩かったです。ゴメンナサイゴメンナサイ…。
該当のソースコードは以下の部分です。
/usr/local/letsencrypt/letsencrypt/le_util.py:341
正規表現で書いてあるので、普通に読めますが、丁寧にコメントにも書いてありますね。
お後がよろしいようで。
今日、職場のおねーさんから「Let'sEncryptでアンダースコアを使ったFQDNが通らない」という問い合わせがありまして。
そういえばkusanagiコマンド側には厳密なFQDNのチェックは実装されてないなー、と思って、Let'sEncryptのソースコード読んでみました。
2016.05.09追記
みんめもの中のおねーさん、引用ありがとーございます。(謝
■Let'sEncryptで使えるFQDN
Let's Encryptでは、FQDNに以下のような制限があります。- TLD : 「a-z 2~63文字」
- Domain Name : 「a-z 0-9 ハイフン 1~63文字 + ドット」の繰り返し
但し最初と最後にハイフンは使えない。 - サブドメインの階層・FQDN全体の長さの制限なし
使えないFQDNの例
mikumo_anzu.conoha.jp(アンダースコアは使用できません)hatsune.3939(TLDに数字は使えません)
nyanpasu-.com(ドメイン名の前後にハイフンは使えません)
192.168.0.1(IPアドレスはFQDNではありません)
localhost(TLDのみのFQDNは使えません)
アンダースコアが使えない理由
現実には使えしまっているアンダースコアですが、Let'sEncryptで使えない理由は以下にありました。Requested domain is not a FQDN
https://community.letsencrypt.org/t/requested-domain-is-not-a-fqdn/8112
「RFC1123で定義されてる文字しか使えないよ!」
注)RFC1123日本語訳はこちら
・・・はい、ごもっともです。
2.1 ホスト名と番号 正しいインターネットホスト名のシンタックスは、RFC-952 [DNS:4] で 規定されている。ホスト名のシンタックスの一面について、ここで修正 する。一番目の文字に対する制限を緩和し、文字か数字のいずれかを認 める。ホストソフトウェアは、このより寛容なシンタックスをサポート しなければならない (MUST)。 ホストソフトウエアは、最大 63 文字のホスト名を扱わなければならず (MUST)、最大 255 文字までのホスト名を扱うべきである (SHOULD)。これを読むと、RFC-592について本来は議論しなければいけないようです。
ななめ読みしましたが、やはりアンダースコアはFQDNを表現する要素としては含まれていません。 ・・・結果、RFCよりLet'sEncryptの要件の方が、まだ緩かったです。ゴメンナサイゴメンナサイ…。
■ソースコードの場所
Let'sEncryptはPythonで記述されている為、PerlやPHPを普通に書くことが出来れば読む分には問題ありません。該当のソースコードは以下の部分です。
/usr/local/letsencrypt/letsencrypt/le_util.py:341
337 # FQDN checks from 338 # http://www.mkyong.com/regular-expressions/domain-name-regular-expression-example/ 339 # Characters used, domain parts < 63 chars, tld > 1 < 64 chars 340 # first and last char is not "-" 341 fqdn = re.compile("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,63}$") 342 if not fqdn.match(domain): 343 raise errors.ConfigurationError("Requested domain {0} is not a FQDN".format(domain)) 344 return domain注)CMSの処理を回避する為、一部文字を全角に変更しています。
正規表現で書いてあるので、普通に読めますが、丁寧にコメントにも書いてありますね。
お後がよろしいようで。
コメントする