2021 申请SSL证书、Nginx和SpringBoot配置阿里云SSL证书解决HTTP HTTPS及不生效、打包报错详细教程
目录
1. 获取SSL证书文件
这里使用阿里云申请免费SSL证书为例。
1.1 购买SSL证书
首先进入 申请链接.
0元购买后,进入 SSL证书管理控制台.
1.2创建证书
如下图步骤 1到4,创建证书,填写申请个人内容,其他默认即可,注意网址部分需要区分,例如www.baidu.com 、 baidu.com、cdn.baidu.com可以分别申请证书。
免费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 www.baidu.com;
# www.baidu.com更换为你配置的域名
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: 443
ssl:
key-store: classpath:xxx.pfx
key-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);
}
//添加
@Bean
public Connector connector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(httpPort);
return connector;
}
@Bean
public TomcatServletWebServerFactory servletContainer() {
// 对http请求添加安全性约束,将其转换为https请求
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(connector());
return tomcat;
}
3.5 重新maven install
4. 问题
主要介绍SpringBoot配置SSL遇到的问题,其他文章会介绍