关于HTTPS的一点点了解

本文详细介绍了SSL证书的生成、转换及在Tomcat上的部署流程,包括私钥生成、CSR文件创建、证书文件转换为JKS格式,以及单向和双向SSL的配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要对SSL证书这块进行部署和各类型证书转换,记录一些中间使用到的命令。

先说下怎么获取证书。
首先是生成私钥:

openssl genrsa -out private.key 2048
openssl genrsa -aes256 -passout pass:123456 -out private.key 2048


上面是生成2048bit不带密码的私钥和带密码的私钥
然后是生成证书请求文件(CSR):

openssl req -new  -key private.key -out example.csr


会提示你输入国家、省份、城市等信息
输入完成会得到一个csr文件。
我们拿这个csr就可以直接去CA机构申请证书。
CA机构给我们的一般都是PEM格式的证书
大概的文件会有:网站的SSL证书文件、如果是双向验证的话可能会提供客户端Email证书文件(拿来访问网站使用)、证书链文件。
这时候我们会有:私钥文件、csr文件、SSL证书文件、证书链文件、Email证书文件(可能存在)。

Tomcat使用https需要用到keystore文件,在tomcat官网文档其实都有说明的。
http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html
先生成一个jks(java key store)

openssl pkcs12 -export -in  certificate.crt -inkey private.key -nodes -password pass:123456 -out example.p12
keytool -v -importkeystore -srckeystore example.p12 -srcstoretype PKCS12 -destkeystore example.jks -deststoretype JKS

上面的命令意思是:先把证书certificate.crt和私钥private.key转成一个带密码的p12文件(有些也叫pfx)。密码是123456。使用keytool工具将pkcs12格式的文件转成jks里面包含了证书和密钥对。

在这个过程当中p12文件的密码最好和jks的密码保持一致,在这里踩过一次坑。
如果不一致,部署tomcat的时候会导致:

Caused by: java.security.UnrecoverableKeyException: Cannot recover key


我们可以修改里面密钥对的密码,修改和jks的密码一致:

keytool -keypasswd -keystore example.jks -alias 1


-alias后面跟着的“1”是别名,不指定的情况下一般默认都是1。
在部署双向SSL的时候需要一个信任列表,就是说那些ca签发的客户端证书可以访问到我们的网站。
使用keytool命令导入签发客户端证书的ca证书:

keytool -import -file trustca.cer -keystore trustca.jks


如果没有jks会自动创建的,tomcat需要的两个jks已经有了example.jks、trustca.jks。

Tomcat8.5以下和8.5以上的部署方式不太一样的,但使用的文件都是一样的,部署以TOMCAT8.0.53为例,来看看server.xml里面的配置:
把下面这个配置放开并且配置SSL证书(这个是单向的SSL,不需要客户端选择证书的)

 <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="/home/testservice/key/example/example.jks" keystorePass="123456" />


双向的只要添加两个参数就行,把clientAuth改为true(clientAuth有几个值,看自己的需要选择):               
 

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="true" sslProtocol="TLS" keystoreFile="/home/testservice/key/example/example1.jks" keystorePass="123456"
                 truststoreFile="/home/testservice/key/example/trustca.jks" truststorePasss="123456" />   

     

以上是生成到部署的全部过程。                 
Tomcat8.5的双向SSL配置如下(单向的把SSLHostConfig其他参数去掉就行):
 

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig certificateVerification="require" truststoreFile="/home/testservice/key/example/trustca.jks" truststorePassword="123456">
            <Certificate certificateKeystoreFile="/home/testservice/key/example/example.jks" type="RSA" certificateKeystorePassword="123456"/>
        </SSLHostConfig>
    </Connector>


具体配置参数在这里有:
http://tomcat.apache.org/tomcat-8.5-doc/config/http.html    

最后来个图吧:

以下是在解惑的过程中在网上找到的有关命令:

    提取密钥对:
    openssl pkcs12 -in example.pfx -nocerts -nodes -out keypair.key
    密钥对提取私钥:
    openssl rsa -in keypair.key -out example_private.key
    密钥对提取公钥:
    openssl rsa -in keypair.key -pubout -out example_pub.key
    pfx提取证书
    openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes
    
    查看jks    
    keytool -list -v -keystore example.jks    
    创建JKS
    keytool -genkey -alias eyestrip -keystore example.jks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值