SpringBoot 与 Nginx 集成 Https

***        使用方法一集成

1 生成证书

1.1 利用OpenSSL生成证书(已测试)

生成证书需要使用openssl工具,包括根证书和用户证书。在生成证书的具体步骤之前,我们需要知道几个与证书相关的文件格式,所有这些格式都属于PKCS(The Public-Key Cryptography Standards)标准:

  • .key文件:私钥文件,通常使用rsa算法,私钥需要自己保存,无需提交给CA机构
  • .csr文件:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写。生成该文件时需要用到自己的私钥。
  • .crt文件:CA认证后的证书文件,certificate的缩写。
  • .crl文件:证书吊销列表,Certificate Revocation List的缩写
  • .pem文件:用于导出,导入证书时候的证书的格式。该文件实际上是.crt文件和.key文件的合体,与windows下使用.pfx类似,不同的是.pem使用base64字符存储,而.pfx使用二进制存储。

生成CA根证书的步骤:生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt

生成用户证书的步骤:生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt

通常情况,我们部署在内网的服务会采用自签名的证书,只有部署公网服务时才会向CA机构申请证书。

1.1.1 安装openssl

yum install openssl openssl-devel -y

1.1.2 生成一个RSA密钥 (私钥)

openssl genrsa -out server.key 2048

1.1.3 生成一个证书请求

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Beijing/L=Beijing/O=iie Inc./OU=Web Security/CN=test.com"

C字段:Country,单位所在国家,为两位数的国家缩写,如:CN 表示中国;
ST 字段:State/Province,单位所在州或省;
L 字段:Locality,单位所在城市/或县区;
O 字段:Organization,此网站的单位名称;
OU 字段:Organization Unit,下属部门名称,也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;
CN 字段:Common Name,网站的域名;

1.1.4 自己签发证书

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

1.1.5 转换格式

openssl pkcs12 -export -clcerts -in server.crt -inkey server.key -out server.pkcs12

利用keytool将生成的证书转换为Java使用的格式

keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 -deststoretype jks

最后生成五个文件,分别是

server.crt

server.csr

server.key

server.pkcs12

server.jks

1.2 利用 keytool 生成证书(已测试,只集成SpringBoot是可以的)

keytool -genkeypair -alias "test" -keyalg "RSA" -keystore "/test.jks" -keysize 1024 -validity 3650  -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass "123456" -storepass "123456"

-alias 别名
-keypass 指定生成密钥的密码
-keyalg 指定密钥使用的加密算法(如 RSA)
-keysize 密钥大小
-validity 过期时间,单位天
-keystore 指定存储密钥的密钥库的生成路径、名称
-storepass 指定访问密钥库的密码

1.3 格式转换(未测试)

1.3.1 jks转换为keystore

keytool -importkeystore -srckeystore e:/keystore/app.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore e:/keystore/app.p12

keytool -v -importkeystore -srckeystore e:/keystore/app.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore e:/keystore/app.keystore

1.3.2  keystore转换为jks

keytool -importkeystore -srckeystore e:/keystore/app.keystore -srcstoretype JKS -deststoretype PKCS12 -destkeystore e:/keystore/app.p12


keytool -v -importkeystore -srckeystore e:/keystore/app.p12 -srcstoretype PKCS12 -destkeystore -deststoretype JKS e:/keystore/app.jks

2 与SpringBoot 集成

(1)将keytool生成的证书保存到SpringBoot项目中的resources目录中
(2)配置application.porperties文件

server.ssl.protocol=TLS
server.ssl.key-alias=test  #如果使用openssl则该配置不添加,如果使用keytool则可以添加
server.ssl.enabled=true
server.ssl.key-store=classpath:test.keystore 或者 test.jks 
server.ssl.key-store-password=123456
server.ssl.key-store-type=jks

(3)如果出现找不到指定密钥文件的问题,解决思路有两个。

         一是路径是否正确。放到resources目录下,application.properties中的配置路径是否正确。

         二是资源是否放行。

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.keystore</include>
                <include>**/*.jks</include>
            </includes>
            <filtering>false</filtering>
        </resource>
<build>

3 与Nginx集成(已测试)

安装Nginx,配置nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
         listen       8443 ssl;
         server_name  localhost;
         ssl_certificate   /nginx/cert/server.crt;#方法一生成的crt文件
         ssl_certificate_key  /nginx/cert/server.key;#方法一生成的key文件
         ssl_verify_client off;
         ssl_session_cache    shared:SSL:1m;
         ssl_session_timeout  10m;

         ssl_ciphers  HIGH:!aNULL:!MD5;
         ssl_prefer_server_ciphers  on;

         location / {
             #root   html;
             #index  index.html index.htm;
             proxy_pass https://ip:port;  
             proxy_set_header X-Forwarded-For $remote_addr;
             proxy_set_header Host $Host;   
             proxy_set_header Destination $fixed_destination;
         }
   }
}

*** 注意 ***

该内容是网络资源的整合并结合自己的实践,尚未清楚机理。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Spring Boot中配置SSL证书以实现HTTPS访问有几个步骤。首先,你需要获取SSL证书文件。 然后,你可以按照以下步骤进行配置: 1. 将证书文件(通常是以.crt或.pfx为后缀的文件)复制到项目的资源目录下,比如src/main/resources。 2. 在项目的配置文件(通常是application.properties或application.yml)中添加以下配置: ``` server.port=443 server.ssl.key-store-type=PKCS12 server.ssl.key-store=classpath:your_certificate_file.pfx server.ssl.key-store-password=your_certificate_password ``` 其中,your_certificate_file.pfx是你复制的证书文件名,your_certificate_password是证书的密码。 3. 启动项目后,你可以通过HTTPS访问你的应用程序。你可以在浏览器中输入https://localhost 来尝试。 请确保在配置过程中提供正确的证书文件和密码,并将其与你的应用程序相匹配。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot下配置SSL证书HTTPS访问](https://download.csdn.net/download/ningyunyuyi/10545683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [使用SpringBoot配置https(SSL证书)](https://blog.csdn.net/yucaifu1989/article/details/124384022)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [SpringBoot配置SSL证书](https://blog.csdn.net/qq_40247570/article/details/122549072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值