如果要在Spring Boot中启用SSL(HTTPS),可以使用nginx
在Spring Boot中启用SSL(HTTPS)后,继续《启用Spring Boot中的SSL(HTTPS)- Let’s Encrypt版》的内容。
首先
为了在Spring Boot中使用SSL,我进行了各种调查,并发布了两篇文章。之后我继续进行了更多的研究,最终得出的结论是“使用nginx是最佳选择”。关于nginx和Let’s Encrypt的组合,不仅在Qiita上有很多信息,在本文中我将重点讲解它们与Spring Boot的组合。我参考了以下文章。
使用let’s encrypt将光速WEB服务器(nginx)进行SSL加密和HTTP/2化,同时提高安全评级至A+。
使用的环境是Google Cloud Engine。
安装和配置Nginx。
您可以使用以下命令在Ubuntu trusty操作系统上安装最新版本的nginx。请根据需要适当更改相关内容。更详细的信息可以在nginx官方网站上找到。
curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo sh -c "echo 'deb http://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
sudo sh -c "echo 'deb-src http://nginx.org/packages/ubuntu/ trusty nginx' >> /etc/apt/sources.list"
sudo apt-get update
sudo apt-get install nginx
我会使用以下命令创建Diffie-Hellman交换密钥,以备后用。
sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
sudo openssl dhparam 2048 -out dhparam.pem
下一步是创建nginx的配置文件。
cd /etc/nginx/conf.d
sudo cp default.conf default.conf.bak
sudo emacs default.conf
以下是您的要求的本地化中文版本:
按照以下方式进行。作为前提,Spring Boot将在localhost(127.0.0.1)的8443端口启动。我们将域名设为example.com,但请根据需要进行修改。此外,假设已使用Let’s Encrypt发放了证书。有关如何使用Let’s Encrypt的方法,我们在上一篇文章中已经写过了。在使用nginx的同时,下面的更改将把http请求重定向到https。
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
upstream spring_boot {
server 127.0.0.1:8443;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl on;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!DSS;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
resolver 8.8.8.8;
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
server_name example.com;
location / {
proxy_pass http://spring_boot;
}
}
当设置完成后,将重新启动nginx。
sudo /etc/init.d/nginx restart
Spring boot的配置
我們將進行如下更改。 .)
server.port=8443
#server.ssl.key-store=keystore.p12
#server.ssl.key-store-password=mypassword
#server.ssl.keyStoreType=PKCS12
#server.ssl.keyAlias=tomcat
endpoints.enabled=false
management.add-application-context-header=false
无论是 endpoints.enabled 还是 management.add-application-context-header 设置都是我喜欢的。这两个设置都有”防止用户看到多余信息”的效果。
在以前的文章中,我们使用Spring Boot的功能实现了SSL。在上一次的时候,Qualys SSL报告给出的安全评级是B。
这一次我们没有使用Spring Boot的SSL功能,而是将nginx作为前端站点。在这个设置中,Qualys SSL Report的安全报告评级为A+。我们做得好!
因此,之前提到的“PKCS12的自动更新”已经不再需要了。相反,只需通过cron执行以下命令来更新证书就可以了。
if !./letsencrypt-auto renew > /var/log/letsencrypt/renew.log 2>&1 ; then
echo Automated renewal failed:
cat /var/log/letsencrypt/renew.log
exit 1
fi
也许有一种方法可以仅通过Spring Boot功能获得评级A+,但我找不到。如果有人知道好的方法,请留下评论,谢谢。