TL;DR
手持ちのDNSゾーンに
xip NS ns-aws.sslip.io.
NS ns-gce.sslip.io.
NS ns-azure.sslip.io.
を追加しておく。
検証とか開発をしていると証明書を使う必要がでてくる。まぁ大抵は、自己証明書を使うことになるのだが、実は結構めんどくさい。
まだ、ホスト名を使えればいいが、IPアドレスでアクセスしたりすると、たとえ証明書を持っていたとしてもオレオレ証明書を使う必要がある。
とはいえ、example.comの証明書は取れない。
いくつか順を追って解決していく必要がある。
1. FQDNでアクセス
2. ワイルドカード証明書の利用
1.に関しては、フリーなワイルドカードDNSを利用することで解決する。フリーなワイルドカードDNSとは、IPアドレスをホスト名にするとホスト名形式で解決してくれる。
例えば、192.168.1.1というアドレスに対して、192.168.1.1.nip.ioとすると、192.168.1.1が返ってくる。
nslookup 192.168.1.1.sslip.io 8.8.8.8
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: 192.168.1.1.sslip.io
Address: 192.168.1.1
これで、IPアドレスアクセスが全てFQDNアクセスができるようになった。ただし、証明書を使うためには少し工夫が必要である。
この”sslip.io”は、サブドメインのネームサーバに振り向けることにより、自ドメインでも使える。ちなみに、IPアドレス.フリーなワイルドカードDNS(自ドメインじゃない)だと、Let’s Encryptの証明書は取れないと思う。みんな同じことを考えていて、証明書の発行回数リミットに到達していると思う。なので、自ドメインにインテグレーションをして利用するべき。
xip NS ns-aws.sslip.io.
NS ns-gce.sslip.io.
NS ns-azure.sslip.io.
以下デモ用の例。証明書が取れるドメインで設定すべき。
nslookup 192.168.1.1.xip.k8slab.internal. 192.168.19.2
Server: 192.168.19.2
Address: 192.168.19.2#53
Non-authoritative answer:
Name: 192.168.1.1.xip.k8slab.internal
Address: 192.168.1.1
よって、上記の例で言うと、k8slab.internalに対してワイルドカードDNS証明書をとれば、もう、IPアドレスアクセスとはおさらばで、全て証明書でのアクセスができる。(言わずもがなだが、internalドメインでは、SSL証明書は取れない。)
ちなみに、このフリーなワイルドカードDNSを使うと、vCenterでFQDNを指定するときに別途、DNSを立てる必要がなくなる。vCenterにはFQDNは必要はないのだが。。。
2. ワイルドカード証明書の利用は、お金をかけないのであれば、Let’s Encryptのdns-01認証である。Lets’s EncryptだとパブリックIPが必要だが、そんなにパブリックIPを持っていないし、クラウドで一時的に借りてくるのが面倒。dns-01認証であれば、ドメインとDNSサーバがあれば、証明書が取れる。要は、自分のDNSのゾーンファイルが触れる必要がある。
Let’s Encryptを利用する場合、自動化するのであれば、DNSはAWS Route 53にすることをおすすめする。設定方法は以下の通り。
Route 53にあるゾーンのLets Encryptのワイルドカード証明書
いや、これは結構、目から鱗だった。CloudStackを利用していたときにフリーなワイルドカードDNSの存在を知っていたのだが、ドメイン名が思い出せず、探していたのだが見つかった。さらにLet’s Encryptと組み合わせることで、IPアドレスがついているものであれば、全部証明書アクセスができるようになった。たまにあるのよね、自己証明書アクセスを除けられることが。まぁ、Let’s Encryptも最初のころはJavaではねられたりして、証明書を練り込んで使うこともあったが。だいたい、証明書ストアのパスフレーズも知らなきゃわからない。
もし、ドメインをもっていて、DNS証明書を利用しているなら、サブドメインの追加だけで済むので使わなきゃ損だと思う。