Symbol-bootstrap(以下、「bootstrap」とします。)とhttps-portalを使ってノードのHTTPS化をしていましたが、bootstrap側でHTTPS対応してくれたため、https-portalを使用しないように環境を修正しました。
もともとhttps-portalはLet's Encryptの証明書を使用していて、bootstrapも同様の対応が可能です。
- 前提とする環境
Symbol-bootstrap:1.1.3
- 通信要件
インターネットからノードに対して以下のポート宛ての通信が許可されている必要があります。
TCP80
TCP3001
※https-portalでHTTPS化している環境であれば、この通信はすでに許可されていると思います。
- カスタムプリセットファイルの編集
bootstrap側でHTTPSを有効にするためカスタムプリセットファイル(my-preset.ymlなど)を編集して、以下のセクションを追加します。
httpsProxies:
-
excludeDockerService: false
- bootstrapの再起動
あとはこんな感じでbootstrapを再起動して動作確認。
symbol-bootstrap stop
symbol-bootstrap start -p mainnet -a dual -c my-preset.yml --upgrade
docker ps
でhttps-proxy
というコンテナが立ち上がっていることが確認できると思います。
- 証明書の準備が整うまで待つ
bootstrapが起動した後、初回は証明書発行のプロセスが自動的に動くのでしばし待ちます。
そのうち、以下のようなメッセージがでればHTTPS通信が可能になります。
https-proxy | Certificate signed!
https-proxy | Signed certificate for <ノードのドメイン>
https-proxy | [cont-init.d] 20-setup: exited 0.
https-proxy | [cont-init.d] 30-set-docker-gen-status: executing...
https-proxy | [cont-init.d] 30-set-docker-gen-status: exited 0.
https-proxy | [cont-init.d] done.
https-proxy | [services.d] starting services
https-proxy | [services.d] done.
https-proxyのログは以下のコマンドでも確認できます。
journalctl -f CONTAINER_NAME=https-portal
- https-portalの後処理
私のノードではhttps-portalをサービス化していたので、後処理でサービスの削除などを行いました。
systemctl disable https-portal
systemctl disable https-portal
rm /etc/systemd/system/https-portal
systemctl daemon-reload
systemctl reset-failed
- 証明書の更新
証明書の更新は以下のコマンドでできます。
symbol-bootstrap renewCertificates
※パスワード入力が必要です。
試しにやってみましたが、まだ期間が残っているので更新は不要な旨のレスポンスでした。
なお、更新は証明書の期限の30日前から可能になります。
強制的に更新するオプションに--force
がありますが、試していません。
$ symbol-bootstrap renewCertificates
_ _ _ _ _
___ _ _ _ __ ___ | |__ ___ | | | |__ ___ ___ | |_ ___ | |_ _ __ __ _ _ __
/ __|| | | || '_ ` _ \ | '_ \ / _ \ | | _____ | '_ \ / _ \ / _ \ | __|/ __|| __|| '__|/ _` || '_ \
\__ \| |_| || | | | | || |_) || (_) || ||_____|| |_) || (_) || (_) || |_ \__ \| |_ | | | (_| || |_) |
|___/ \__, ||_| |_| |_||_.__/ \___/ |_| |_.__/ \___/ \___/ \__||___/ \__||_| \__,_|| .__/
|___/ |_|
? Enter the password used to encrypt and decrypt custom presets, addresses.yml, and preset.yml files. When providing
a password, private keys will be encrypted. Keep this password in a secure place! ****************
2022-01-29T08:00:02.579Z info Password has been provided
2022-01-29T08:00:02.630Z info Generating config from preset 'mainnet'
2022-01-29T08:00:02.631Z info Using assembly 'dual'
2022-01-29T08:00:02.911Z info User for docker resolved: 1001:1001
2022-01-29T08:00:02.911Z info Running image using Exec: symbolplatform/symbol-server:gcc-10-1.0.3.1 openssl x509 -enddate -noout -in node.crt.pem -checkend 2592000
2022-01-29T08:00:03.747Z info The node.crt.pem certificate for node node will expire on Apr 12 14:53:56 2022 GMT. No need to renew it yet.
2022-01-29T08:00:03.747Z info
2022-01-29T08:00:03.748Z info The SSL certificates are up-to-date. There is nothing to upgrade.
2022-01-29T08:00:03.748Z info
- 参考
カスタムプリセットの参考
カスタムプリセットの参考
symbol-bootstrap renewCertificatesの参考