• JDK自带工具keytool生成ssl证书


    最近因为工作需要,所以略微了解了下CA认证,简单做了个demo。

    对于基础知识可以参考

    http://blog.csdn.net/guzicheng/article/details/38610621

    http://blog.csdn.net/guzicheng/article/details/38610689?ABstrategy=codes_snippets_optimize_v3

    http://www.cnblogs.com/sdjnzqr/p/4277092.html

    个人觉得这几篇文章介绍的挺全面的。

    下面是本人在做demo时顺手记下的。

    一、为服务器生成证书

    1、  cmd进入命令行

    2、  cd进入c盘根目录 或 jdk的bin目录下

    3、  使用keytool命令生成证书

    keytool -genkey -alias tomcat -keypass 111111 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/tomcat.keystore -storepass 111111 

    注释:

    -alias tomcat(别名) 

    -keypass 123456(别名密码) 

    -keyalg RSA(算法) 

    -keysize 1024(密钥长度) 

    -validity 365(有效期,天单位) 

    -keystore D:/keys/tomcat.keystore(指定生成证书的位置和证书名称) 

    -storepass 123456(获取keystore信息的密码)

     

    注:1)D:/keys/ 目录需要提前手动创建好,否则会生成失败

    2)“您的名字与姓氏是什么” 输入域名,不要输入IP地址

    二、为客户端生成证书

    为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12,

    keytool -genkey -alias client -keypass 111111 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore D:/keys/client.p12 -storepass 111111

     

    三、让服务器信任客户端证书

    1、  由于不能直接将PKCS12格式的证书库导入,所以必须先把客户端证书导出为一个单独的CER文件

    keytool -export -alias client -keystore D:/keys/client.p12 -storetype PKCS12 -keypass 111111 -file D:/keys/client.cer

     

    2、  将该文件导入到服务器的证书库,添加一个信任证书

    keytool -import -v -file D:/keys/client.cer -keystore D:/keys/tomcat.keystore -storepass 111111

     

    完成之后通过list命令可以查看服务端的证书库

    keytool -list -v -keystore D:/keys/tomcat.keystore

    四、让客户端信任服务器证书

    1、  由于双向SSL认证,客户端也要验证服务端证书,因此,必须把服务端证书添加到浏览器的“受信任的根证书颁发机构”。

    由于不能直接将keystore格式的证书库导入,必须先报服务器证书导出为一个单独的CER文件

    keytool -keystore D:/keys/tomcat.keystore -export -alias tomcat -file D:/keys/server.cer

     

    2、  双击server.cer文件,安装提示安装证书,将证书填入到“受信任的根证书颁发机构”。打开浏览器   - 工具  -  internet选项-内容- 证书-把中级证书颁发机构里的www.localhost.com(该名称即时你前面生成证书时填写的名字与姓氏)证书导出来-再把导出来的证书导入  受信任的根颁发机构  就OK了。

    五、配置tomcat服务器

    1、  Tomcat conf下的server.xml

    <Connector port="8080" protocol="HTTP/1.1"

    connectionTimeout="20000"

    maxHttpHeaderSize = "8192" <!--属性值需要设置的大一点,否则会出现further occurrences of HTTP header parsing errors will be logged at DEBUG level.这个错误 -->

    redirectPort="8443" />

    <Connector port="8443"

    protocol="org.apache.coyote.http11.Http11Protocol" <!--如果是jdk1.6属性值设置为HTTP/1.1,1.7则设置为org.apache.coyote.http11.Http11Protocol -->

    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

    clientAuth="false" sslProtocol="TLS"

    keystoreFile="D:/keys/tomcat.keystore" keystorePass="111111"

    truststoreFile="D:/keys/tomcat.keystore" truststorePass="111111"/>

            

    2、  Tomcat conf下的web.xml

    <login-config>   

    <!-- Authorization setting for SSL -->   

    <auth-method>CLIENT-CERT</auth-method>   

    <realm-name>Client Cert Users-only Area</realm-name>   

    </login-config>   

    <security-constraint>   

    <!-- Authorization setting for SSL -->   

    <web-resource-collection >   

    <web-resource-name >SSL</web-resource-name>   

    <url-pattern>/*</url-pattern>   

    </web-resource-collection>   

    <user-data-constraint>   

    <transport-guarantee>CONFIDENTIAL</transport-guarantee>   

    </user-data-constraint>   

    </security-constraint>

    3、  属性说明:

    clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证

    keystoreFile:服务器证书文件路径

    keystorePass:服务器证书密码

    truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书

    truststorePass:根证书密码

    4、  注意:

    ① 设置clientAuth属性为True时,需要手动导入客户端证书才能访问。

    ② 要访问https请求 需要访问8443端口,访问http请求则访问Tomcat默认端口(你自己设置的端口,默认8080)即可。

    六、配置web-info/web.xml

    <!-- 强制SSL,即http请求自动跳转成https -->

    <security-constraint>

    <web-resource-collection>

      <web-resource-name>SSL</web-resource-name>

      <url-pattern>/*</url-pattern><!-- 全站使用SSL -->

    </web-resource-collection>

    <user-data-constraint>

    <description>SSL required</description>

            <!-- CONFIDENTIAL: 确保传输数据不被修改,不能被查看-->

            <!-- INTEGRAL: 确保传输数据不被修改 -->

            <!-- NONE: 不做特殊限制-->                                                                                                                       

    <transport-guarantee>CONFIDENTIAL</transport-guarantee>

    </user-data-constraint>

    </security-constraint>

    七、将服务导入jdk的cacerts中

    keytool -import -alias tomcatsso -file "D:keysserver.cer" -keystore "C:Program FilesJavajdk1.7.0_09jrelibsecuritycacerts" -storepass changeit  

    写在最后,运用了证书认证后,系统会出现跨域问题,要注意!

  • 相关阅读:
    android之app widget(二)
    使用作业异步调用存储过程的示例
    简单两步走 中兴V880获取权限方法
    3D化网页工具:Tilt
    在各种处理中应用排序规则的示例
    GreenSock推出了新一代动画引擎平台GSAP v12
    Derived_Tables_And_Correlated_Subqueries
    六大浏览器帐号管理功能大PK
    Entity Framework 5 Sample Provider简介
    中兴U880刷recovery与刷机详细教程
  • 原文地址:https://www.cnblogs.com/xiaoSY-learning/p/6588412.html
Copyright © 2020-2023  润新知