SpringBoot可以通过在application.properties或application.yml配置文件中配置各种server.ssl.*属性来声明性使用SSL(https),比如下面的例子在application.properties中设置SSL属性:

spring boot调用执行python脚本 springboot调用https_https

如果使用了上面的配置就表示springboot应用程序不再在端口8080上支持HTTP连接请求,SpringBoot不能通过配置application.properties来实现既支持HTTP连接又支持HTTPS连接,这是做不到的,如果要同时支持HTTP和HTTPS,则需要以编程方式配置其中的一个,建议使用application.properties文件来配置HTTPS,以编程方式配置HTTP,这是比较容易的方法;

SpringBoot支持配置https具体步骤:

一、生成证书

可以使自签名证书(平时测试的时候)或者从SSL证书授权中心购买证书(上线)

平时生成证书进行测试的话,有两种生成自签名证书的方式:

1. 利用JDK工具生成证书

spring boot调用执行python脚本 springboot调用https_https_02

证书生成后我们可以验证下jks是否包含了完整的证书链:

keytool -list -v -keystore server.jks

keytool -list -v -keystore server.pkcs12

2. 利用Openssl工具生成证书

通过openssl来生成,如果linux中没有安装openssl,需要安装一下,执行:

yum install openssl openssl-devel -y

  ①  #生成一个RSA密钥 (私钥)

openssl genrsa -out server.key 2048

  ②  #生成一个证书请求

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

  ③  #自己签发证书

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

字段解读

C字段:Country,单位所在国家,为两位数的国家缩写,如:CN 表示中国;

ST 字段:State/Province,单位所在州或省;

L 字段:Locality,单位所在城市/或县区;

O 字段:Organization,此网站的单位名称;

OU 字段:Organization Unit,下属部门名称,也常常用于显示其他证书相关信息,如证书类型,证书产品名称或身份验证类型或验证内容等;

CN 字段:Common Name,网站的域名;

转换为pkcs12格式(因为在Java中使用证书,需要转换一下格式)
(p12、pkcs12是同一个,只是证书的后缀不同而已)

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

//或

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

转换为jks格式(因为在Java中使用证书,需要转换一下格式,jks是java独有的)

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

二、配置或编写代码

注意我们是在Java环境中,常用的证书形式有p12、pkcs12格式、jks格式如果不是该格式,需要转换p12、pkcs12是同一个,只是证书的后缀不同而已