申请SSL证书、Nginx和SpringBoot配置阿里云SSL证书解决HTTP HTTPS及不生效、打包报错详细教程
目录1. 获取SSL证书文件1.1 购买SSL证书1.2创建证书2. Nginx配置SSL2.1 开始Nginx配置2.2 Nginx.conf配置2.3 添加ECS安全组3. 开始配置SpringBoot SSL证书3.1 下载证书3.2 配置YML文件3.3 更改pom.xml3.4 更改入口文件3.5 重新maven install4. 问题目录
1. 获取SSL证书文件
这里使用阿里云申请免费SSL证书为例。
1.1 购买SSL证书
首先进入 申请链接.
0元购买后,进入 SSL证书管理控制台.
1.2创建证书
如下图步骤 1到4,创建证书,填写申请个人内容,其他默认即可,注意网址部分需要区分,例如 、 、可以分别申请证书。
免费SSL可以签发20个证书,对应不同的域名,有效期一年。
填写申请后,需要审核几分钟,回到SSL证书管理控制台. 可以看到已经申请成功的证书列表。
2. Nginx配置SSL
2.1 开始Nginx配置
如果使用的是阿里云ESC,系统会自动配置域名规则。证书下载选择Nginx。
下载文件解压后有两个文件,分别是xxx.key和xxx.pem文件。
找到nginx的默认目录/url/local/nginx,找不到可以执行以下命令尝试查找
find / -name nginx
👆 查找nginx目录命令
ps -ef | grep nginx
👆 查看nginx端口命令,可以看到nginx目录
如果没有可以选择其他目录,最好是和nginx.conf文件同路径下。
find / -name nginx.conf
👆 查找nginx配置文件命令(如果找不到nginx配置文件,那后续无法操作,请重新安装、配置。)
2.2 Nginx.conf配置
创建cert文件夹,将上述两个SSL证书文件放入此目录内。更改nginx.conf配置文件内容,添加server。
server {listen 443 ssl;# 配置HTTPS的默认访问端口为443。# 如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。# 如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。server_name ;# 更换为你配置的域名root /xxx;# 需要将 /xxx更换为你的web目录index index.html index.htm;ssl_certificate /home/cert/xxx.pem; # 需要将 /home/cert/xxx.pem替换成已上传的证书文件的名称。ssl_certificate_key /home/cert/xxx.key; # 需要将 /home/cert/xxx.key替换成已上传的证书密钥文件的名称和所在目录。ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;# 表示使用的加密套件的类型。ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。ssl_prefer_server_ciphers on;# ↓开启GZIP ,可以不开启。gzip on;gzip_buffers 32 4K;gzip_comp_level 6;gzip_min_length 100;gzip_types application/javascript text/css text/xml;gzip_disable "MSIE [1-6]\.";gzip_vary on;# ↑开启GZIP ,可以不开启。location / {root /xxx;# 需要将 /xxx更换为你的web目录index index.html index.htm;# ↓ 解决刷新页面变成404问题的代码,个性化404界面,可以不设置try_files $uri $uri/ /index.html; }# ↓可以不设置location /api/ {proxy_pass https://127.0.0.1:8080;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /xxx;}# ↑可以不设置}
更改配置完成后,执行如下命令,重启nginx
nginx -s reload
如果有报错,请检查nginx.conf。
2.3 添加ECS安全组
然后打开 阿里云ECS控制台.,进入你的实例,配置安全组,开放443端口访问。
至此Nginx配置SSL证书结束,访问你的http://你的域名,查看上方是否出现锁的标志。如果出现“不安全”,需要配查是否使用CDN服务器、代码中是否访问了旧的http连接。
3. 开始配置SpringBoot SSL证书
3.1 下载证书
3.2 配置YML文件
解压xxx.pfx、password.txt文件到 项目\src\main\resources 目录内,复制密码文件中的字符串,然后修改配置yml文件。其他配置格式自行查找。
server:port: 443ssl:key-store: classpath:xxx.pfxkey-store-password: 密码keyStoreType: PKCS12
这里需要注意:port 和 ssl同级,其他教程port是ssl的父级,我这边编译出错,排查后改为同级编译成功。
3.3 更改pom.xml
<build><plugins><!--添加--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
3.4 更改入口文件
import org.springframework.beans.factory.annotation.Value;@Value("${server.port}") //这里使用你的yml配置private Integer httpPort;public static void main(String[] args) {SpringApplication.run(xxx.class, args);}//添加@Beanpublic Connector connector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setPort(httpPort);return connector;}@Beanpublic TomcatServletWebServerFactory servletContainer() {// 对http请求添加安全性约束,将其转换为https请求TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();tomcat.addAdditionalTomcatConnectors(connector());return tomcat;}
3.5 重新maven install
4. 问题
主要介绍SpringBoot配置SSL遇到的问题,其他文章会介绍
[1]: SpringBoot错误:Unable to start ServletWebServerApplicationContext due to multiple ServletWebServerFactory beans : webServerFactory,servletContainer.