zoukankan      html  css  js  c++  java
  • 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  

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

  • 相关阅读:
    LeetCode Missing Number (简单题)
    LeetCode Valid Anagram (简单题)
    LeetCode Single Number III (xor)
    LeetCode Best Time to Buy and Sell Stock II (简单题)
    LeetCode Move Zeroes (简单题)
    LeetCode Add Digits (规律题)
    DependencyProperty深入浅出
    SQL Server存储机制二
    WPF自定义RoutedEvent事件示例代码
    ViewModel命令ICommand对象定义
  • 原文地址:https://www.cnblogs.com/xiaoSY-learning/p/6588412.html
Copyright © 2011-2022 走看看