Let’sEncryptを使用してCertBotの使用を試みましたが、snapdのインストールが出来ず断念しました。
代わりに、acme.shによるSSL証明書の発行をして、Nginxへの設定を行いました。
今回は、単純に悔しかったので自戒を込めて記録に残します。
初めて読むと情報量の多さと慣れないLinuxの操作に辟易しますが、要はLet’sEncryptの操作の仕組みに合わせて、acme.shで設定していきます。
Let'sEcryptとは
Let's Encrypt - フリーな SSL/TLS 証明書
CertBotとは
Certbot
acme.shとは
GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol
前記事からの続きです。
以上で、クライアント-Nginx間はHttps、Nginx-アプリケーション間はHttpという状況になりました。
そして、発生したエラーがMixedContent
This request has been blocked; the content must be served over HTTPS.
Nginx-アプリケーション間もHttpsにする必要性がでたので、組み込みTomcat側でも設定を行います。
権限は一般ユーザーで実行する事を考え、ポートは8443とします。
設定についてはこちらを参照しました。
Securing Spring Boot Applications With SSL
Spring bootでSSL(HTTPS)を有効にする - Qiita
Let’sEncryptで用意していたSSL証明書はCRTファイルとKEYファイルで構成されていました。しかし、上記サイトにある通り、pfx形式での設定が必要です。
pfxは、CRTファイルとKEYファイルの合成で作成できるので、OpenSSLで実行します。
パスワードの設定を求められるので、設定し、これらをSpring Boot側に設定します。
以上で、Httpsの通信ができました。
続いての問題が、WebSocket部分が全く動作しない事です。
WebSocketは通信時にハンドシェイクというものを行います。
WebSocket についてまとめてみる - Qiita
この、wssプロトコルでの最初の接続がうまくいきませんでした。
理由はこちら
①ヘッダーの問題
Nginxを用いたWebSocketサーバのReverseProxy構成及びSSL/TLS接続 - tail my trail
②Stompブローカー側の問題
CORSを絶対に理解する
WebSocket API :: Spring Framework - リファレンス