欢迎来到魔幻小生的博客

利用keytool实现tomcat双向SSL认证

前言

本文介绍如何实现tomcat服务器的双向SSL认证,这里使用keytool工具生成自签名证书。在真正的商用系统中建议向CA付费购买证书。

生成tomcat服务器证书

keytool -genkeypair -alias tomcat -storetype PKCS12 -keystore tomcat.jks -storepass 12345678 -keyalg RSA

注意这里必须使用RSA算法(其它算法的证书需要在tomcat的server.xml中修改配置,请读者自行研究)。证书库也可以为.keystore格式。

image

What is your first and last name?必须是tomcat部署主机的域名或者IP[如:hxc.com 或者 10.20.90.198](就是你将来要在浏览器中输入的访问地址),否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,可填入"localhost"。

导出tomcat服务器证书

从证书库tomcat.jks中将tomcat服务器证书导出,用于后续在客户端上安装该证书

keytool -exportcert -alias tomcat -keystore tomcat.jks -storepass 12345678 -file tomcat.cer

生成客户端证书

keytool -genkeypair -alias mykey -storetype PKCS12 -keystore mykey.pfx -storepass 12345678 -keyalg RSA

注意这里必须使用RSA算法(其它算法的证书需要在tomcat的server.xml中修改配置,请读者自行研究)。生成的mykey为pfx或p12格式均可。

image

导出客户端证书

从mykey.pfx中将客户端证书导出,用于导入tomcat服务器证书库(pfx证书无法直接导入)

keytool -exportcert -alias mykey -keystore mykey.pfx -storepass 12345678 -file mykey.cer

将客户端证书导入tomcat服务器证书库

由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。

keytool -importcert -file mykey.cer -keystore tomcat.jks -storepass 12345678

image

查看tomcat服务器证书库

我们可以查看一下tomcat服务器证书库,确认是否导入成功。

keytool -list -keystore tomcat.jks -storepass 12345678

image

tomcat服务器的server.xml文件配置

我们需要修改{TOMCAT_HOME}/conf/server.xml文件的配置,将tomcat.jks路径配置进去,修改如下:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS"
               keystoreFile="/opt/hxc/tomcat.jks" keystorePass="12345678"
               truststoreFile="/opt/hxc/tomcat.jks" truststorePass="12345678">
    </Connector>

属性说明:
clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证
keystoreFile:服务器证书文件路径
keystorePass:服务器证书密码
truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书
truststorePass:根证书密码

重启tomcat后可以访问页面看一下(由于目前客户端没有安装证书,还无法建立安全连接)

image

客户端安装证书

将之前操作产生的tomcat.cer安装至“受信任的根证书颁发机构”

image

将mykey.pfx安装至“个人”

image

测试服务端

使用浏览器访问https://10.20.90.198:8443/(你的tomcat服务器地址)
可以看到会让你选择mykey证书进行登录

image

登录后可以看到地址栏右上角有一个锁的标志,且提示“与该服务器的这次连接是加密的”

image

附录:tomcat10的server.xml文件配置

经实践发现,tomcat10版本配置与tomcat8、9的稍有不同,需要将tomcat.jks配置在<SSLHostConfig>中,其余操作步骤均相同

    <Connector port="8445" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true" 
               sslProtocol="TLS">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="/opt/hxc/tomcat.jks"
                         certificateKeystorePassword="12345678"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

image

posted @ 2021-04-09 15:28  魔幻小生  阅读(1133)  评论(0编辑  收藏  举报