*** 使用方法一集成
生成证书需要使用openssl
工具,包括根证书和用户证书。在生成证书的具体步骤之前,我们需要知道几个与证书相关的文件格式,所有这些格式都属于PKCS(The Public-Key Cryptography Standards)标准:
生成CA根证书的步骤:生成CA私钥(.key)-->生成CA证书请求(.csr)-->自签名得到根证书(.crt)
生成用户证书的步骤:生成私钥(.key)-->生成证书请求(.csr)-->用CA根证书签名得到证书(.crt)
通常情况,我们部署在内网的服务会采用自签名的证书,只有部署公网服务时才会向CA机构申请证书。
yum install openssl openssl-devel -y
openssl genrsa -out server.key 2048
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,网站的域名;
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
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
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 指定访问密钥库的密码
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
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
(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中的配置路径是否正确。
二是资源是否放行。
src/main/resources
**/*.properties
**/*.keystore
**/*.jks
false
安装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;
}
}
}
*** 注意 ***
该内容是网络资源的整合并结合自己的实践,尚未清楚机理。