- 当你的前端网页添加了 https 后,那么 由于... 前端调用后端的接口,同样的也需要配置 https。下面以宝塔为例,如何实现,请看下面讲解:
1.准备好 SSL 证书
application.yml
源文件:
yaml
spring:
redis:
host: 60.204.232.18
port: 6379
database: 3
cloud:
nacos:
server-addr: 192.168.15.233:8848
dubbo:
registry:
address: nacos://192.168.15.233:8848
server:
port: 9000
address: 0.0.0.0
spring:
cloud:
gateway:
routes:
- id: api-backend
uri: lb://api-backend
predicates: Path=/api/backend/**
- id: api-interface
uri: lb://api-interface
predicates: Path=/api/interface/**
logging:
level:
org:
springframework:
cloud:
gateway: INFO
dubbo:
application:
name: api-gateway-dubbo
qosEnable: false
enable-file-cache: false
protocol:
name: dubbo
port: -1
第一步,让我们在 Spring Boot 配置文件中添加 SSL 配置。在您的 application.yml 中添加以下配置:
yaml
server:
port: 9000
address: 0.0.0.0
ssl:
key-store: /www/server/nginx/ssl/60.204.232.18/keystore.p12
key-store-password: your_password
key-store-type: PKCS12
首先,我们需要将现有的 SSL 证书转换为 Java 可用的 PKCS12 格式。请执行:
yaml
openssl pkcs12 -export -in /www/server/nginx/ssl/60.204.232.18/fullchain.pem -inkey /www/server/nginx/ssl/60.204.232.18/private.key -out /www/server/nginx/ssl/60.204.232.18/keystore.p12 -name tomcat
执行时会要求输入密码,请记住这个密码, 这个密码就是配置到上述 yml
文件中的 your_password
,需要配置到 application.yml
中。
- 结果会生成 这个
keystore.p12
2. 修改前端的 nginx 配置中的代理设置
yaml
location /api {
rewrite ^/api/(.*) /$1 break;
proxy_pass https://60.204.232.18:9000/api;
proxy_ssl_verify off; # 如果是自签名证书,需要添加这行
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
}
请修改配置后执行:
bash
nginx -t && nginx -s reload
3. 重启 springboot 项目
- 不出意外,可能会出现权限不够的情况
bash
Jan 15 19:19:55 hcss-ecs-1524 spring_api_gateway_1_0_jar[1186650]: Caused by: java.io.FileNotFoundException: /www/server/nginx/ssl/60.204.232.18/keystore.p12 (Permission denied)
Jan 15 19:19:55 hcss-ecs-1524 spring_api_gateway_1_0_jar[1186650]: #011at java.io.FileInputStream.open0(Native Method) ~[na:1.8.0_371]
- 第一步:检查文件权限和所有者,使用以下命令查看 keystore.p12 文件的当前权限状态:
bash
ls -l /www/server/nginx/ssl/60.204.232.18/keystore.p12
- 输出
bash
[root@hcss-ecs-1524 ~]# ls -l /www/server/nginx/ssl/60.204.232.18/keystore.p12
-rw------- 1 root root 5090 Jan 15 17:51
:::success
下一步:运行以下命令查看文件/www/server/nginx/ssl/60.204.232.18/keystore.p12
的权限详细信息:
:::
bash
ls -l /www/server/nginx/ssl/60.204.232.18/keystore.p12
输出示例:
plain
-rw------- 1 root root 5090 Jan 15 17:51 /www/server/nginx/ssl/60.204.232.18/keystore.p12
:::success
参数意义:
-rw-------
:- 第一个字符
-
表示这是一个普通文件。 rw-
表示文件所有者(root)有读写权限。---
表示文件所属组和其他用户没有任何权限。
- 第一个字符
1
:文件的硬链接数。root root
:- 第一个
root
表示文件所有者。 - 第二个
root
表示文件所属组。
- 第一个
5090
:文件大小(字节)。Jan 15 17:51
:文件的最后修改时间。/www/server/nginx/ssl/60.204.232.18/keystore.p12
:文件路径。
:::
- 使用以下命令查看所有 Java 进程:
bash
ps aux | grep java
bash
[root@hcss-ecs-1524 ~]# ps aux | grep spring_api_gateway
root 1190235 0.0 0.0 9208 1140 pts/1 S+ 19:21 0:00 grep --color=auto spring_api_gateway
[root@hcss-ecs-1524 ~]# ps aux | grep java
www 883228 0.2 13.5 3591144 519020 ? Ssl 15:37 0:34 /www/server/java/jdk1.8.0_371/bin/java -jar -Xmx1024M -Xms256M /www/wwwroot/proj/java-proj/API-Platform/backend/api-interface-1.0.jar --spring.config.location=file:/www/wwwroot/proj/java-proj/API-Platform/backend/config/api-interface/ --spring.profiles.active=prod
www 914538 1.7 17.8 3775112 681888 ? Ssl 16:01 3:32 /www/server/java/jdk1.8.0_371/bin/java -jar -Xmx1024M -Xms256M /www/wwwroot/proj/java-proj/API-Platform/backend/api-backend-1.0.jar --spring.config.location=file:/www/wwwroot/proj/java-proj/API-Platform/backend/config/api-backend/ --spring.profiles.active=prod
root 1190693 0.0 0.0 9208 1164 pts/1 S+ 19:21 0:00 grep --color=auto java
root 3526323 13.3 15.9 3123100 611736 ? Ssl Jan13 459:58 /usr/lib/jvm/java-1.8.0-openjdk/bin/java -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -Xms256m -Xmx256m -Xmn512m -Dnacos.standalone=true -Dnacos.member.list= -Xloggc:/home/nacos/logs/nacos_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -Dloader.path=/home/nacos/plugins,/home/nacos/plugins/health,/home/nacos/plugins/cmdb,/home/nacos/plugins/selector -Dnacos.home=/home/nacos -jar /home/nacos/target/nacos-server.jar --spring.config.additional-location=file:/home/nacos/conf/ --spring.config.name=application --logging.config=/home/nacos/conf/nacos-logback.xml --server.max-http-header-size=524288
[root@hcss-ecs-1524 ~]#
- 现在我们可以看到Java应用是以www用户运行的。下一步需要修改keystore.p12文件的权限,让www用户可以读取。执行以下命令:
bash
chmod 644 /www/server/nginx/ssl/60.204.232.18/keystore.p12