springboot 项目配置https

  • 当你的前端网页添加了 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

参数意义:

  1. -rw-------
    • 第一个字符-表示这是一个普通文件。
    • rw-表示文件所有者(root)有读写权限。
    • ---表示文件所属组和其他用户没有任何权限。
  2. 1:文件的硬链接数。
  3. root root
    • 第一个root表示文件所有者。
    • 第二个root表示文件所属组。
  4. 5090:文件大小(字节)。
  5. Jan 15 17:51:文件的最后修改时间。
  6. /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
相关推荐
Asthenia04123 小时前
浏览器缓存机制深度解析:电商场景下的性能优化实践
后端
遥遥远方 近在咫尺3 小时前
HTTPS原理
网络协议·https
编程星空3 小时前
HTTP 和 HTTPS 的区别
网络协议·http·https
databook4 小时前
『Python底层原理』--Python对象系统探秘
后端·python
超爱吃士力架5 小时前
MySQL 中的回表是什么?
java·后端·面试
追逐时光者5 小时前
Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
后端·.net
典龙3306 小时前
如何使用springboot项目如何实现小程序里面商品的浏览记录功能案例
spring boot
苏三说技术6 小时前
10亿数据,如何迁移?
后端
bobz9656 小时前
openvpn 显示已经建立,但是 ping 不通
后端
customer087 小时前
【开源免费】基于SpringBoot+Vue.JS个人博客系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源