Nginx/Tomcat/SpringBoot配置自生成SSL证书

1.配置自生成证书(方式一,无需密码)

1.1.生成证书

1.下载 nginx windows 版本并解压,这里不过多描述

2.下载 OpenSSL windows 版本并安装,用于生成证书

3.添加 C:\OpenSSL-Win64,C:\nginx-1.16.1 到环境变量 PATH 路径;

4.在C:\nginx-1.16.1目录下创建ssl目录,以后自签名证书存到这个目录

5.开始创建证书,启动cmd命令行程序,切到C:\nginx-1.16.1\ssl 目录。

基本思路:先创建服务器私钥,再创建CSR文件,最后用私钥签发CSR文件得到服务器公钥证书。

  1. 创建服务器私钥
    C:\nginx-1.16.1\ssl>openssl genrsa -des3 -out server.key 2048

Enter pass phrase for server.key:123456

Verifying - Enter pass phrase for server.key:123456

  1. 创建CSR证书请求文件

    C:\nginx-1.16.1\ssl>openssl req -new -key server.key -out server.csr

    Country Name (2 letter code) [AU]:cn
    State or Province Name (full name) [Some-State]:sd
    Locality Name (eg, city) []:jn
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:sdcd
    Organizational Unit Name (eg, section) []:sdcd
    Common Name (e.g. server FQDN or YOUR name) []:localhost
    A challenge password []:sdcd2023
    An optional company name []:sdcd

  2. 备份有秘密的私钥文件

    C:\nginx-1.16.1\ssl>copy server.key server.key.orig

  3. 去掉私钥文件的密码

    C:\nginx-1.16.1\ssl>openssl rsa -in server.key -out server.key
    Enter pass phrase for server.key:

  4. 使用服务器私钥签署服务器公钥证书

    C:\nginx-1.16.1\ssl>openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

1.2.部署自签证书到nginx服务器

  1. 用记事本编辑 C:\nginx-1.16.1\conf\nginx.conf文件,向文件末尾追加 https 服务器配置:
xml 复制代码
    # 二级路由跳转、接口代理、https信任自签证书
    server {
        server_name  192.168.43.20;

        listen 443 ssl;        # 监听443端口,也可用其他端口, 开启ssl(必须)

        # 引用ssl证书(必须,如果放在nginx/conf/ssl下可以用相对路径,其他位置必须用绝对路径)
        ssl_certificate   ../ssl/server.crt;
        ssl_certificate_key ../ssl/server.key;

        # 协议优化(可选,优化https协议,增强安全性)
        ssl_protocols    TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers on;
        ssl_session_cache  shared:SSL:10m;
        ssl_session_timeout 10m;

        # 二级路由跳转
        location /ayyingyong20221119 {
            try_files $uri $uri/ /ayyingyong20221119/index.html;
            index index.html;
        }

        # 当遇到/api (也就是我们的接口)对其进行反向代理
        location /ayyingyong20221119/api {
            proxy_pass https://localhost:9090/ayyingyong20221119/api;
        }
    }
  1. 重启 nginx

    nginx -s reload

  2. 登录浏览器访问测试
    https://ip:端口/***;使用443不需要端口,其他需要端口

1.3.部署自签证书到tomcat服务器

1.找到server.xml文件,修改Connector 为下面

xml 复制代码
<Connector port="8080" protocol="HTTP/1.1" scheme="https" secure="true" clientAuth="false" 				sslProtocol="TLS"
				SSLEnabled="true" 
				SSLCertificateFile="C:\apache-tomcat-7.0.68-ui\conf\server.crt"
				SSLCertificateKeyFile="C:\apache-tomcat-7.0.68-ui\conf\server.key"
               connectionTimeout="20000" 
URIEncoding="UTF-8"/>

2.配置自生成证书(方式二,需要密码)

2.1.生成证书

复制代码
keytool -genkeypair -alias 'tomcat' -keyalg 'RSA' -keystore 'D:/tomcat/conf/tomcat.keystore'

2.2.部署到Tomcat

  1. 修改tomcat主配置文件server.xml

    去掉注释,并将keystoreFile和keystorePass处替换成自己的证书路径和生成证书时的口令即可.
    <Connector port="8443" protocol="HTTP/1.1" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="本机的keystore路径" keystorePass="生成证书时的口令" />

  2. 注释掉server.xml中这段代码,不存在这段代码则不用管

xml 复制代码
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

用这种方法,不注释上面这行代码启动tomcat会报错

复制代码
严重: Failed to initialize end point associated with ProtocolHandler ["http-apr-
8888"]
java.lang.Exception: Connector attribute SSLCertificateFile must be defined when
 using SSL with APR
        at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:507)
        at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.jav
a:650)
        at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:434)
        at org.apache.catalina.connector.Connector.initInternal(Connector.java:9
78)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.core.StandardService.initInternal(StandardService
.java:560)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.core.StandardServer.initInternal(StandardServer.j
ava:820)
        at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:642)
        at org.apache.catalina.startup.Catalina.load(Catalina.java:667)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:253)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:427)

2.3. 部署SpringBoot项目

xml 复制代码
server:
  port: 8008
  ssl:
    enabled: true
    key-store-type: JKS
    key-store: classpath:server.keystore
    key-store-password: 123456
    key-alias: server

参考文档

springboot+vue+nginx 配置Https访问------自签名证书验证 - 尹镇镇 - 博客园 (cnblogs.com)

springboot+vue+nginx 配置Https访问------自签名证书验证 | 航行学园 (voycn.com)

SpringBoot+Vue2前后端项目配置ssl证书_springboot配置ssl证书-CSDN博客

Web服务器群集:Tomcat配置https证书-CSDN博客

完美配置Tomcat的HTTPS-CSDN博客

相关推荐
爱学习的小可爱卢6 分钟前
JavaEE进阶——SpringBoot拦截器详解:从入门到实战
java·spring boot·后端
柯南二号1 小时前
【后端】【Java】一文详解Spring Boot RESTful 接口统一返回与异常处理实践
java·spring boot·状态模式·restful
南龙大魔王1 小时前
spring ai Alibaba(SAA)学习(二)
java·人工智能·spring boot·学习·ai
汤姆yu1 小时前
基于springboot的运动服服饰销售购买商城系统
java·spring boot·后端
期待のcode1 小时前
Springboot数据层开发—Springboot整合JdbcTemplate和Mybatis
spring boot·后端·mybatis
柯南二号1 小时前
【后端】【Java】一文深入理解 Spring Boot RESTful 风格接口开发
java·spring boot·restful
全栈独立开发者1 小时前
软考架构师实战:Spring Boot 3.5 + DeepSeek 开发 AI 应用,上线 24 小时数据复盘(2C1G 服务器抗压实录)
java·spring boot·后端
E***U9451 小时前
Java 校招 / 社招:Spring Boot 项目实战指南
java·开发语言·spring boot
在坚持一下我可没意见1 小时前
Spring 开发小白学习过程中常用通用配置文件,即拿即用!(持续更新中)
java·数据库·后端·学习·spring·tomcat·mybatis
m0_740043731 小时前
SpringBoot03-Mybatis框架入门
java·数据库·spring boot·sql·spring·mybatis