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
    评论
集成NginxSpring Boot应用程序需要进行一些配置和步骤。下面是一个简单的方法来实现这个过程: 1. 首先,确保你已经安装了Nginx服务器并成功运行。你可以按照中提到的步骤来安装和配置Nginx。 2. 在你的Spring Boot应用程序中,你需要确保应用程序的端口和Nginx的配置文件中的代理设置一致。默认情况下,Spring Boot应用程序使用8080端口,你可以通过在应用程序的配置文件(application.properties或application.yml)中设置`server.port`属性来更改端口。 3. 在Nginx的配置文件中添加一个代理配置来转发请求到Spring Boot应用程序。你可以在Nginx的配置文件中找到`http`部分,添加类似以下的配置: ``` server { listen 80; server_name localhost; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` 这个配置将把所有的请求转发到Spring Boot应用程序在8080端口上运行的地址。你可以根据你的应用程序的实际情况进行调整。 4. 保存并关闭Nginx的配置文件。然后重新启动Nginx服务器以使配置生效。 现在,你的Spring Boot应用程序已经成功集成Nginx。你可以通过访问Nginx服务器的地址来访问你的应用程序。Nginx将会将请求转发到Spring Boot应用程序上。 请注意,上述配置只是一个简单的示例,你可能需要根据你的具体需求进行更多的配置。你可以参考中提到的示例来进行更复杂的配置,如负载均衡和反向代理。 希望这个简单的教程能够帮助到你!如果你有任何进一步的问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值