之前写了一篇博文,用tomcat和jdk 的keytools搭建https环境,可是是属于单向验证的,若是本身须要的环境是单向验证的环境,能够参考 用tomcat搭建https算法
keytool参数解释shell
keytool -genkeyapache
-alias 证书别名浏览器
-keypass 证书密码 tomcat
-keyalg 所使用的加密算法,例如:RSA安全
-keysize 秘钥长度,例如1024服务器
-validity 有效期,以天为单位,默认是90天app
-keystore 指定生成证书的位置和证书名称工具
-storepass 获取keystore信息的密码测试
利用keytool工具生成证书
在此示例中,个人密码使用的bkyapp
第一步:为服务器生成证书
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore
注意:您的姓氏名字这个是必填项,当在本机测试的时候能够填写localhost,可是当时生产环境中,必须填写域名或者IP,例如www.baidu.com,要否则浏览器会弹出警告信息,提示用户证书和所在域不匹配
第二步:为客户端生成证书
keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keypass bkyapp -storepass bkyapp -keystore D:/certs/client.p12
生成客户端证书之后,双击client.p12文件,而后安装到可信任的第三方发布者列表中便可
第三步:让服务端信任客户端证书
keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -keypass bkyapp -file D:certs/client.cer
因为服务端并不认识p12格式的客户端证书,因此须要把客户端证书转化为cer格式
keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore
以上命令,导入客户端证书client.cer 到server.keystore文件中,
此时能够运行 keytool -list -v -keystore D:/certs/server.keystore 查看server.keystore中有几个证书
C:\Program Files\Java\jdk1.8.0_40\bin>keytool -list -v -keystore D:/certs/server.keystore 输入密钥库口令: 密钥库类型: JKS 密钥库提供方: SUN 您的密钥库包含 2 个条目 别名: tomcat 建立日期: 2016-2-27 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 发布者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列号: 2feeb67a 有效期开始日期: Sat Feb 27 00:15:17 CST 2016, 截止日期: Sun Feb 26 00:15:17 CST 2017 证书指纹: MD5: 8F:CD:23:13:3F:DE:11:34:FB:1A:13:3A:63:7A:A8:C2 SHA1: 5A:86:8B:8E:F3:8A:0D:54:6A:5D:05:F7:C5:C6:B9:6E:42:C2:9A:6B SHA256: 85:29:0C:8C:17:9B:4E:FB:2D:1E:98:4B:CF:05:9D:B5:7B:DA:62:88:C6:DC:5F:5D:F0:FC:EA:7D:B1:D1:8D:1D 签名算法名称: SHA256withRSA 版本: 3 扩展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 3D B0 2F CD 1C 55 EF F9 3D 55 A5 79 1E A9 48 7F =./..U..=U.y..H. 0010: C6 6C F5 77 .l.w ] ]
能够看出秘钥库中包含了两个条目
第四步:让客户端信任服务器证书
keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer
因为浏览器是不认keystore格式的证书的,因此要把服务器的keystore格式的正式转化为cer证书,证书生成之后,双击server.cer证书,而后安装到“受信任的根证书颁发机构”中
以上过程总共生成四个文件,四个文件以下图:
总结下来,证书的生成也就是五条命令,若是不想读上面过程的话,直接按照次序运行下面五条命令便可:
keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:/certs/client.p12 keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -file D:/certs/client.cer keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer
修改tomcat根目录下conf文件夹下的server.conf文件,默认状况下,8443端口是关闭的,下面这段代码是被注释掉的,打开而后进行配置便可
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="D:/certs/server.keystore" keystorePass="bkyapp" truststoreFile="D:/certs/server.keystore" truststorePass="bkyapp" />
clientAuth 表示是否对客户端进行校验,若是设置为false,则配置的是单向验证,即客户端对服务器作验证,可是服务器并不对客户端验证,只有把clientAuth设置为true,才是双向验证,而后设置keystoreFile和truststoreFile的位置和密码
修改完毕之后,启动tomcat访问localhost:8443便可
经过chrom浏览器访问,能够在地址栏看到一个锁的小图标
若是你按照上面步骤作,而且最后看到正确的结果,过程不想看的话,下面的就不须要再看了,若是想看一下我操做的过程,能够接着往下阅读
一、生成证书的整个shell文件
C:\Program Files\Java\jdk1.8.0_40\bin>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 365 -keystore D:/certs/server.keystore 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: localhost 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? [否]: y 输入 <tomcat> 的密钥口令 (若是和密钥库口令相同, 按回车): C:\Program Files\Java\jdk1.8.0_40\bin>keytool -genkey -alias mykey -keyalg RSA -storetype PKCS12 -keystore D:/certs/client.p12 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: localhost 您的组织单位名称是什么? [Unknown]: 您的组织名称是什么? [Unknown]: 您所在的城市或区域名称是什么? [Unknown]: 您所在的省/市/自治区名称是什么? [Unknown]: 该单位的双字母国家/地区代码是什么? [Unknown]: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown是否正确? [否]: y C:\Program Files\Java\jdk1.8.0_40\bin>keytool -export -alias mykey -keystore D:/certs/client.p12 -storetype PKCS12 -file D:/certs/client.cer 输入密钥库口令: 存储在文件 <D:/certs/client.cer> 中的证书 C:\Program Files\Java\jdk1.8.0_40\bin>keytool -import -v -file D:/certs/client.cer -keystore D:/certs/server.keystore 输入密钥库口令: 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 发布者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列号: 1896b2e8 有效期开始日期: Sat Feb 27 00:16:58 CST 2016, 截止日期: Fri May 27 00:16:58 CST 2016 证书指纹: MD5: A8:72:9E:8E:55:E0:20:D4:19:98:4A:59:4E:7A:61:71 SHA1: 13:9E:CB:4A:1F:1B:BB:62:DB:A4:C8:ED:9D:1B:EF:9B:FB:DA:AF:BD SHA256: 3F:88:F4:E3:32:0F:07:0A:08:E0:C1:EB:56:47:4B:9A:99:F2:2C:4D:63:77:44:18:97:CE:0E:73:6F:C4:71:B7 签名算法名称: SHA256withRSA 版本: 3 扩展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: DC 66 45 59 38 B7 06 C6 2D 64 8A 53 4C E9 A2 8F .fEY8...-d.SL... 0010: 07 8A 04 E7 .... ] ] 是否信任此证书? [否]: y 证书已添加到密钥库中 [正在存储D:/certs/server.keystore] C:\Program Files\Java\jdk1.8.0_40\bin>keytool -keystore D:/certs/server.keystore -export -alias tomcat -file D:/certs/server.cer 输入密钥库口令: 存储在文件 <D:/certs/server.cer> 中的证书 C:\Program Files\Java\jdk1.8.0_40\bin>keytool -list -v -keystore D:/certs/server.keystore 输入密钥库口令: 密钥库类型: JKS 密钥库提供方: SUN 您的密钥库包含 2 个条目 别名: tomcat 建立日期: 2016-2-27 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 发布者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列号: 2feeb67a 有效期开始日期: Sat Feb 27 00:15:17 CST 2016, 截止日期: Sun Feb 26 00:15:17 CST 2017 证书指纹: MD5: 8F:CD:23:13:3F:DE:11:34:FB:1A:13:3A:63:7A:A8:C2 SHA1: 5A:86:8B:8E:F3:8A:0D:54:6A:5D:05:F7:C5:C6:B9:6E:42:C2:9A:6B SHA256: 85:29:0C:8C:17:9B:4E:FB:2D:1E:98:4B:CF:05:9D:B5:7B:DA:62:88:C6:DC:5F:5D:F0:FC:EA:7D:B1:D1:8D:1D 签名算法名称: SHA256withRSA 版本: 3 扩展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: 3D B0 2F CD 1C 55 EF F9 3D 55 A5 79 1E A9 48 7F =./..U..=U.y..H. 0010: C6 6C F5 77 .l.w ] ] ******************************************* ******************************************* 别名: mykey 建立日期: 2016-2-27 条目类型: trustedCertEntry 全部者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 发布者: CN=localhost, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown 序列号: 1896b2e8 有效期开始日期: Sat Feb 27 00:16:58 CST 2016, 截止日期: Fri May 27 00:16:58 CST 2016 证书指纹: MD5: A8:72:9E:8E:55:E0:20:D4:19:98:4A:59:4E:7A:61:71 SHA1: 13:9E:CB:4A:1F:1B:BB:62:DB:A4:C8:ED:9D:1B:EF:9B:FB:DA:AF:BD SHA256: 3F:88:F4:E3:32:0F:07:0A:08:E0:C1:EB:56:47:4B:9A:99:F2:2C:4D:63:77:44:18:97:CE:0E:73:6F:C4:71:B7 签名算法名称: SHA256withRSA 版本: 3 扩展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: DC 66 45 59 38 B7 06 C6 2D 64 8A 53 4C E9 A2 8F .fEY8...-d.SL... 0010: 07 8A 04 E7 .... ] ] ******************************************* *******************************************
二、不启用对客户端验时,客户端显示出来的消息
首先会报警,说是否是安全链接,而后点击高级,强制访问的话,也是能够访问的,可是在浏览器地址栏https会被划掉
三、在tomcat中开启客户端校验,可是客户端未导入证书时,服务器地址会没法访问,出现客户端验证失败
另外附上我生成的certs文件
你也能够直接下载的certs文件,部署到本机的tomcat下面,访问localhost