yuusuke-roughの日記

Java,SpringBoot,趣味等

Let’sEncryptでNginxとHTTPS通信を行った in Amazon Linux 2

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 - リファレンス