tomcat实现https双向认证(在win10系统使用jdk1.8自带工具keytool)
以下操作我在D:\shiro-cas-ssl进行操作
使用win+R运行certmgr.msc可以查看证书安装页面
keytool -genkey -alias basic -keyalg dsa -keysize 1024 -sigalg dsa -startdate 2018/11/01 -validity 365 -keystore H:\basic.keystore -storepass basic1 -keypass keybasic
把keystore当做数据库,basic当做表就比较容易理解了。上面的命令使用类比数据库的方式来解释:
keytool表示使用java_home中的bin中的keytool.exe这个程序
-genkey表示新建一个密钥对–新建一个数据库
-alias表示数据库中新建一个表
basic是数据库中的一张表的名字
-keyalg数据库中数据加密的方式
dsa一种加密方法
-keysize加密长度 1024字节
-sigalg签名的加密方式 dsa加密方式
-startdate数据库开始(创建)时间(ps:时间格式yyyy/mm/dd,还可以加上具体的时间)
-validity有效时间 365(天)
-keystore创建数据库(证书库)
d:\basic.keystore(路径和文件名字,其实文件的后缀隐士的给出了证书库的格式jks,其他的请在官网查找)
-storepass数据库的密码
-keypass数据库表的密码
安装签名证书(根证书)
1.创建签名证书库
keytool -genkey -alias basic -keystore basic.keystore -keypass 123456 -storepass 123456 -validity 365 -keyalg rsa
2.查看签名证书库
keytool -v -list -keystore basic.keystore -storepass 123456
3.接着将证书库中的证书导出来(公钥)
keytool -export -v -alias basic -keystore basic.keystore -file basic.cer -storepass 123456
4.接着我们安装签名证书(也就是公钥)双击basic.cer
我们安装到信任的根证书颁发机构目录下
‘
此时在证书管理界面中就能看到我们安装的证书了
安装客户端证书
1.生成clientOne证书库
keytool -genkey -alias clientOne -keystore clientOne.keystore -validity 365 -keyalg rsa -storepass clientOne -keypass clientOne
查看clientOne证书库
keytool -v -list -keystore clientOne.keystore -storepass clientOne
2.生成clientOne证书的公钥cer文件(此时生成后先不安装,因为安装也是不受信任,需要生成签名请求)
keytool -export -v -alias clientOne -keystore clientOne.keystore -file clientOne.cer -storepass clientOne -keypass clientOne
3.对clientOne生成签名请求
keytool -certreq -alias clientOne -keystore clientOne.keystore -file clientOne_req.cer -storepass clientOne -keypass clientOne
查看签名请求
keytool -printcertreq -v -rfc -file clientOne_req.cer
4.签名回复(使用信任的basic证书库对clientOne_req.cer的签名请求进行回复)
keytool -gencert -v -alias basic -infile clientOne_req.cer -outfile res_clientOne.cer -keystore basic.keystore -storepass 123456 -keypass 123456
查看签名回复
keytool -printcert -v -rfc -file res_clientOne.cer
5.clientOne导入信任证书库的公钥
keytool -importcert -v -alias clentOne -file basic.cer -keystore clientOne.keystore -storepass clientOne -keypass clientOne
此时查看clientOne证书库
keytool -v -list -keystore clientOne.keystore -storepass clientOne
6.然后将签名回复导入
keytool -importcert -v -alias clientOne -file res_clientOne.cer -keystore clientOne.keystore -storepass clientOne -keypass clientOne
此时查看clientOne证书库
keytool -v -list -keystore clientOne.keystore -storepass clientOne
7.接着导出clientOne证书库的公钥证书
keytool -export -v -alias clientOne -keystore clientOne.keystore -file clientOne.cer -storepass clientOne -keypass clientOne
8.安装客户端证书
安装服务端证书
1.创建服务端证书库
keytool -genkey -alias server -keystore server.keystore -validity 365 -keyalg rsa -storepass server -keypass server
查看服务端证书库
keytool -v -list -keystore server.keystore -storepass server
2.生成server证书的公钥cer文件(此时生成后先不安装,因为安装也是不受信任,需要生成签名请求)
keytool -export -v -alias server -keystore server.keystore -file server.cer -storepass server -keypass server
3.对server生成签名请求
keytool -certreq -alias server -keystore server.keystore -file server_req.cer -storepass server -keypass server
查看签名请求
keytool -printcertreq -v -rfc -file server_req.cer
4.签名回复(使用信任的basic证书库对server_req.cer的签名请求进行回复)
keytool -gencert -v -alias basic -infile server_req.cer -outfile res_server.cer -keystore basic.keystore -storepass 123456 -keypass 123456
查看签名回复
keytool -printcert -v -rfc -file res_server.cer
5.server导入信任证书库的公钥
keytool -importcert -v -alias server1 -file basic.cer -keystore server.keystore -storepass server -keypass server
此时查看server证书库
keytool -v -list -keystore server.keystore -storepass server
6.然后将签名回复导入
keytool -importcert -v -alias server -file res_server.cer -keystore server.keystore -storepass server -keypass server
此时再查看server证书库
keytool -v -list -keystore server.keystore -storepass server
7.接着导出server证书库的公钥证书
keytool -export -v -alias server -keystore server.keystore -file server.cer -storepass server -keypass server
8.安装服务端证书
然后我们配置tomcat.
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="D:/shiro-cas-ssl/server.keystore"
keystorePass="server"
clientAuth="true"
sslProtocol="TLS"
type="RSA"
truststoreFile="D:/shiro-cas-ssl/clientOne.keystore"
truststorePassword="clientOne"
/>
然后配置我们之前搭建的shiro-cas服务器代码(把server.keystore复制到\src\main\resources\下)
##SSL配置
server.ssl.enabled=true
server.ssl.key-store=classpath:server.keystore
server.ssl.key-store-password=server
server.ssl.keyAlias=server
启动服务访问https://shiro.sso.com:8443
会提示没有提供登录证书
可以看到,服务器端的证书是有了,但是客户端的证书还没有
我们使用keytool将keystore转为p12类型的证书。
用于安装
keytool -importkeystore -srckeystore clientOne.keystore -srcstoretype jks -destkeystore clientOne.p12 -deststoretype pkcs12 -storepass clientOne -srcstorepass clientOne
此时生成了clienta.p12的安装证书库。
我们双击安装
接着刷新浏览器,浏览器就会提示我们选择用于身份验证的证书
我们点击确定,就可以访问了
完成!