利用tomcat ,jdk tools 搭建HTTPS双向验证环境

之前写了一篇博文,用tomcat和jdk 的keytools搭建https环境,可是是属于单向验证的,若是本身须要的环境是单向验证的环境,能够参考  用tomcat搭建https算法

1、jdk自带的工具keytool生成服务器端证书和客户端证书

  1. keytool参数解释shell

     keytool -genkeyapache

    -alias 证书别名浏览器

    -keypass 证书密码 tomcat

    -keyalg 所使用的加密算法,例如:RSA安全

    -keysize 秘钥长度,例如1024服务器

    -validity 有效期,以天为单位,默认是90天app

    -keystore 指定生成证书的位置和证书名称工具

    -storepass 获取keystore信息的密码测试

  2. 利用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

2、配置tomcat服务器

修改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

http://pan.baidu.com/s/1o6Uoycq

相关文章
相关标签/搜索