[调研]Tomcat https。

Tomcat https认证调研

阅读提醒

  • 本文只涉及如何快速完成HTTPS部署过程。若想深入相关知识,推荐阅读:《HTTP权威指南》、《HTTPS权威指南》

工作任务需求:采用HTTPS认证访问网站。

准备工作

  • tomcat 7 or 更高版本
  • jdk 7 or 更高版本。因为我是用jdk所以生成 %JAVA_HOME%/bin/keytool.exe。
  • jdk环境必须配置好,如果不会自行百度。
  • keytool 使用介绍
  1. Keytool命令常用参数说明:
  • -genkeypair在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录)
  • -alias 产生别名 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写
  • -keystore 指定密钥库的路径(产生的各类信息将不在.keystore文件中)
  • -keyalg 指定密钥的算法 (如 RSA,DSA,默认值为:DSA)
  • -validity 指定创建的证书有效期多少天(默认 90)
  • -keysize 指定密钥长度 (默认 1024)
  • -storepass 指定密钥库的密码(获取keystore信息所需的密码)
  • -keypass 指定别名条目的密码(私钥的密码)
  • -dname 指定证书发行者信息 其中: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名 称,ST=州或省份名称,C=单位的两字母国家代码”
  • -list 显示密钥库中的证书信息如:keytool -list -v –keystore path/to/keystore -storepass password
  • -v 显示密钥库中的证书详细信息
  • -exportcert 导出指定别名的证书,如:keytool - exportcert -alias theAlias -keystore path/to/keystore -file path/to/keystore/cert -storepass pass
  • -file 参数指定导出到文件的文件名
  • -delete 删除密钥库中某条目 keytool -delete -alias theAlias -keystore path/to/keystore –storepass pass
  • -printcert 控制台打印证书的详细信息,如:keytool -printcert -file path/to/keystore/cert -v
  • -keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias theAlias -keypass oldPass -new newPass -storepass keystorePass -keystore path/to/keystore
  • -storepasswd 修改keystore口令 keytool -storepasswd -keystore path/to/keystore -storepass oldPass -new newPass
  • -importcert 将已签名数字证书导入密钥库 keytool -importcert -alias certAlias -keystore path/to/keystore -file path/to/keystore/cert

生成相关证书

1.Server生成密匙文件证书

​ 为了使用HTTPS连接器,需要生成一份Certificate keystore,用于加密和机密浏览器的SSL沟通。 ​ 如果你使用Unix或者Mac OS,可以通过下列命令:keytool -genkey -alias server-keyalg RSA,在生成过程中可能需要你填入一些自己的信息,例如我的机器上反馈如下:

1、创建一个密钥库来存储服务端的私钥和自签名证书

keytool -genkey -v -alias server -keyalg RSA -keystore D:\MyWorkSpace\apache-tomcat-8.0.36\key\server.keystore -validity 365
  • 密匙库口令:xxxx.com
  • 您的名字与姓氏是什么:这是必填项,并且必须是TOMCAT部署主机的域名或者IP[如:abccom或者 127.0.0.1](就是你将来要在浏览器中输入的访问地址),否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“localhost”。

2、将serve证书导出成cer证书

双向认证客户端也需要服务端证书相当于服务端给客户端颁发了CA证书

keytool -export -alias server -keystore D:\MyWorkSpace\apache-tomcat-8.0.36\key\server.keystore -file D:\MyWorkSpace\apache-tomcat-8.0.36\key\server.cer

3、将服务器端cer证书导入;生成验证客户端证书的根证书

keytool -import -trustcacerts -alias server -file D:\MyWorkSpace\apache-tomcat-8.0.36\key\server.cer -keystore truststore_server.keystore

2.Client端生成证书

​ 这里做测试,只保存一个客户端帐号。

1、生成客户端密匙库

keytool -genkey -v -alias admin -keyalg RSA -storetype PKCS12 -keystore D:\MyWorkSpace\apache-tomcat-8.0.36\key\client.key.p12 
  • 密匙库口令:xxxx.com

3.让Serve信任Client证书。

1、将客户端证书导出为cer文件

keytool -export -alias admin -keystore D:\MyWorkSpace\apache-tomcat-8.0.36\key\client.key.p12 -storetype PKCS12 -storepass eoner.com -rfc -file D:\MyWorkSpace\apache-tomcat-8.0.36\key\client.key.cer

2、将client cer文件导入到server的证书库

keytool -import -alias admin -v -file D:\MyWorkSpace\apache-tomcat-8.0.36\key\client.key.cer -keystore D:\MyWorkSpace\apache-tomcat-8.0.36\key\server.keystore

3、检查server证书库安装结果。

keytool -list -keystore D:\MyWorkSpace\apache-tomcat-8.0.36\key\server.keystore

  • emm 添加成功了。
keytool -printcert -file D:\MyWorkSpace\apache-tomcat-8.0.36\key\client.key.cer

windows查看证书

  • 按照上面的操作至少会存在这几个文件。
  • 双击 server.cer 证书并导入。

windows 下 Ctrl+R certmgr.msc 查看证书是否安装。我竟然装了这么多证书,我就不翻看了。

  • 注意咯,建议把证书放到受信任的根证书办法机构

配置tomcat

注意双向认证和单向认证是不一样的。只是做测试tomcat保留webapps里面的文件。

1、修改server.xml

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" /> //原来是8443

      <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" 	keystoreFile="${catalina.home}\key\server.keystore" 
keystorePass="xxxx.com"  										truststoreFile="${catalina.home}\key\truststore_server.keystore" 
truststorePass="xxxx.com" />
  • clientAuth :设置是否双向验证,默认为false,设置为true代表双向验证。
  • keystoreFile :服务器证书文件路径。
  • keystorePass:服务器证书密码。
  • truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书。
  • truststorePass:根证书密码。

注意事项

  • 由于是测试环境,实际环境请勿使用绝对路径来操作。 ${catalina.home} 可以避免这个操作。

2、测试单向。

嗯,上面已经生成了server.cer手动本地安装就好了。

即便安装了证书部分浏览器依然不认。毕竟是自己给自己发的。当然部分浏览器是可以测试的。

  • 启动tomcat。

3、测试双向

注意了,client.key.p12 客户端需要手动安装。目前我还不清楚为什么用Client.key.p12 导出的Client.cer 不能使用。。。客户端证书一定要手动安装。

  • 将server.xml clientAuth 设置 true;
  • 重启tomcat
  • client属于个人证书。在个人里面找。

双向认证如果客户端证书如果没有导入就无法连接网络。

  • 双击client.key.p12并输入密码导入。

选择证书就可以进入页面了。自己签发的证书浏览器是不会认的。。。

注意事项

  • HTTPS的双向认证,与单向认证的区别就是多了配置一个个人证书,完成Tomcat服务端对客户端身份的认证。关键步骤是:客户端生成证书,将证书导入到服务端的密钥库,然后配置Tomcat的server.xml,同时有一个要特别注意的点,客户端需要把自己生成的密钥库当成证书文件导入到浏览器的个人用户的证书存储路径下。

END

猜你喜欢

转载自my.oschina.net/z201/blog/1626606
今日推荐