Tanzu Platform Self Managed を試す - 管理者向け通信のHTTPS化

最新製品である Tanzu Platform のオンプレ版を試していきます。

ここでは、 アプリのHTTPS通信を有効にする方法を紹介します。

シリーズ

アプリケーションのHTTPS化

アプリケーションのHTTP通信はTPの[Networking] > [Domains] の [Certificate Provider] の設定が影響します。 前回までは、[use HTTP/TCP (unecrypted traffic)] を選択していたので全ての通信が暗号化されていませんでした。

通信の暗号化には、証明書を作成した上で、Certificate Providerに登録していく必要があります。

ここではその手順を紹介します。

自己署名のCA証明書でHTTPS

一旦自己署名の証明書をつくっていきます。まずは、いかの環境変数で、自分のドメインを指定します。

1export APP_DOMAIN=<your app domain fqdn>

そして、以下のコマンドで証明書を作っていきます。

 1DIR=TMP
 2mkdir -p $DIR
 3
 4openssl req -new -nodes -out ${DIR}/ca.csr -keyout ${DIR}/ca.key -subj "/CN=${APP_DOMAIN}/O=tanzu/C=JP"
 5chmod og-rwx ${DIR}/ca.key
 6
 7cat <<EOF > ${DIR}/ext_ca.txt
 8basicConstraints=CA:TRUE
 9keyUsage=digitalSignature,dataEncipherment,keyEncipherment,keyAgreement
10extendedKeyUsage=serverAuth,clientAuth
11subjectAltName = @alt_names
12[alt_names]
13DNS.1 = ${APP_DOMAIN}
14DNS.2 = *.${APP_DOMAIN}
15EOF
16
17openssl x509 -req -in ${DIR}/ca.csr -days 3650 -signkey ${DIR}/ca.key -out ${DIR}/ca.crt -extfile ${DIR}/ext_ca.txt

これをCertificate Provider に登録します。[Networking] > [Certificate Providers] から [Create Certificate Provider] を選択します。

上の手順で生成された、ca.crt の内容を Certificates に、ca.key を Key に登録します。

[Networking] > [Domains] に戻って、Certificate Providerを新しく作った Certificate Providerに登録します。

以上です。ここで、再度前記事 で紹介したようにアプリをデプロイしてきます。

ドメインを登録後、以下のコマンドで curl すれば、HTTPSでの通信が可能です。 注意点は二点で、-k は自己署名の証明書なので、追加しています。もう一点が、IstioのHTTPSはHostヘッダーではなく、SNIヘッダーで振り分けを行っているので --resolve で一時的にDNS登録をしないと、通信ができません。

1curl -k --resolve <アプリドメイン>:443:<アプリIP> https://<アプリドメイン>

以下が結果です。

Lets Encrypt証明書でHTTPS

基本的にはやることは一緒ですが、Lets Encrypt証明書でもやってみます。

以下のコマンドで Lets Encrypt 証明書を作ります。注意点が、エンドポイントのIPアドレスが一定ではないので、必然的にDNSチャレンジが必要になります。 その場合は、<アプリドメイン>のDNSを所有している必要があります。

1export APP_DOMAIN=<your app domain fqdn>

ののち、

1sudo certbot certonly --manual --preferred-challenges dns -d "*.${APP_DOMAIN}"

途中で出る、TXTレコードをDNSに登録して、fullchain.pem と privkey.pem を入手します。

流れはその後は一緒であり、

  • fullchain.pem を Certificate Provider の Certificate に登録
  • privekey.pem を Certificate Provider の Key に登録

全てが完了したら、以下の curl で繋げることができます。 lets encrypt なので"-k"が不要になります。

1curl --resolve <アプリドメイン>:443:<アプリIP> https://<アプリドメイン>

以下が結果です。

以上HTTPS化が完了しました。