如果要在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+,但我找不到。如果有人知道好的方法,请留下评论,谢谢。

广告
将在 10 秒后关闭
bannerAds