zoukankan      html  css  js  c++  java
  • Tomcat 实现双向SSL认证

    大概思路:

    使用openssl生产CA证书,使用keytool生产密钥库
    实验环境:RHEL6.4+Tomcat8
    一、生成CA根证书,并自签名
    1、生成CA密钥
    # genrsa [产生密钥命令] -des3 [加密算法] -out[密钥文件输出路径] 512 [密钥位数]
    openssl genrsa -des3 -out root.key 512
    #可通过下面语句清除密码
    openssl rsa -in root.key -out root.key
    2、生成CA证书请求文件
    # req[产生证书命令] -new[新生成] -key[私钥文件路径] -out[证书文件输出路径]
    openssl req -new -key root.key -out root.csr
    3、生成CA证书(自签名)root.crt
    # x509[签发x509证书命令] -req[输入待签发证书] -days[证书有效期] -signkey[自签发密钥文件路径] 
    #-in[输入待签发证书文件路径] -out[产生x509证书文件输出路径]
    openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey root.key -in root.csr -out root.crt
    二、生成服务器端证书
    1、生成密钥对

    # -genkey[产生密钥对] -alias[密钥对别名] -validity[密钥有效期] -keyalg[密钥算法参数] -keysize[密钥位数]
    # -keypass[密钥保护密码]- storepass[存储密码]
    # -dname[别名相关附加信息,其中cn是服务器的名字一定要与WEB服务器中设置的一样] -keystore[密钥存储文件路径]

    keytool -genkey -alias server -validity 720 -keyalg RSA -keysize 512 -keypass tomcat -storepass tomcat -keystore server.jks

    2、生成证书请求文件
    # -certreq[产生待签名证书] -alias[证书别名] -sigalg[证书算法参数] -file [产生文件输出路径]

    # -keypass[密钥保护密码] -keystore[存储文件路径] -storepass[存储密码]

    keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass tomcat -keystore server.jks -storepass tomcat

    3、使用CA证书为服务器证书签名

    # x509[签发x509证书命令] -req[输入待签发证书] -in[输入待签发证书文件路径] -out[产生x509证书文件输出路径]
    # -CA[签发根证书] -CAkey[根证书密钥文件] -days[证书有效期] -CAserial[CA序列号文件]

    #CA序列号文件可以自己手工创建一个文本文件,并写入初始值01;或者使用“-set_serial 1” 参数手工指定为1,后续生成时+1

    openssl x509 -req -in server.csr -out server.crt -CA root.crt -CAkey root.key -days 365 -CAserial root.serial -sha1 -trustout

    4、将CA证书导入服务器密钥库

    # -import[导入命令] -v trustcacerts[导入信任证书] -storepass[存储密码] -keypass[密钥保护密码]
    # -alias[服务器证书的别名] -file[证书文件路径] -keystore[导入文件路径] -noprompt[不提示"您仍然想要将它添加到自己的keystore 吗?"]

    keytool -import -v -trustcacerts -storepass tomcat -keypass tomcat -alias root -file root.crt -keystore server.jks

    5、将服务端证书导入服务器密钥库

    # -import[导入命令] -v trustcacerts[导入信任证书] -storepass[存储密码] -keypass[密钥保护密码]
    # -alias[服务器证书的别名] -file[证书文件路径] -keystore[导入文件路径]

    keytool -import -v -trustcacerts -storepass tomcat -keypass tomcat -alias server -file server.crt -keystore server.jks

    6、将CA证书导入信任密钥库
     # -import[导入命令] -v trustcacerts[导入信任证书] -storepass[存储密码] -keypass[密钥保护密码]

    # -alias[服务器证书的别名] -file[证书文件路径] -keystore[导入文件路径] -noprompt[不提示"您仍然想要将它添加到自己的keystore 吗?"]

    keytool -import -v -trustcacerts -storepass tomcat -keypass tomcat -alias server-ca -file root.crt -keystore servertrust.jks

    到这一步产生两个密钥库文件:server.jks、servertrust.jks,在tomcat的SSL配置中会用到,这里的两个密钥文件可以合并为一个,也就是将CA和服务器证书导入同一个密钥文件,然后客户端证书也导入该文件,这样在修改tomcat配置时,密钥文件和信任密钥文件就可以指定为同一个文件了。
    三、服务端证书的另一种生成方式
    可通过openssl生成服务端证书,再使用keytool将证书转换格式导入keysotre密钥库,后续客户端证书同上。
    #生成服务端密钥
    openssl genrsa -des3 -out server.key 512
    #生成服务端证书申请文件
    openssl req -new -out server.csr -key server.key
    #使用CA对服务端证书进行签名
    openssl x509 -req -in server.csr -out server.crt -CA root.crt -CAkey root.key -days 365 -CAserial root.serial -sha1 -trustout
    #将服务端证书导出为windows可识别的.p12格式
    openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -password tomcat
    #使用keytool对服务端证书进行格式转换,并导入keystore
    # -importkeystore[从其他密钥库导入一个或多个条目] -srckeystore[源密钥库名称] -srcstoretype[源密钥库类型] -srcstorepass[源密钥库口令]
    # -destkeystore[目标密钥库名称] -deststoretype[目标密钥库类型] -deststorepass[目标密钥库口令]
    keytool -importkeystore -v -srckeystore server.p12 -srcstoretype pkcs12 -srcstorepass tomcat -destkeystore server.jks -deststoretype jks -deststorepass tomcat
    #将CA根证书导入密钥库
    keytool -import -v -trustcacerts -keypass tomcat -storepass tomcat -alias root -file root.crt -keystore server.jks
     
    四、修改TOMCAT配置
    修改conf/server.xml配置文件如下:
        <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
                   maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
                   keystoreFile="conf/server.jks" keystorePass="tomcat"
                   truststoreFile="conf/servertrust.jks" truststorePass="tomcat"
                   clientAuth="flase" sslProtocol="TLS" />
    现在就已经实现了tomcat单向SSL认证了,若要实现双向认证,需要将clientAuth值改为true。
    五、生成客户端证书
    1、生成客户端密钥

    # genrsa [产生密钥命令] -out[密钥文件输出路径] 512 [密钥位数]

    openssl genrsa -des3 -out client.key 512

    2、生成客户端证书申请文件

    # req[产生证书命令] -new[新生成] -out[证书文件输出路径] -key[私钥文件路径]

    openssl req -new -out client.csr -key client.key

    3、使用CA证书为客户端证书签名

    # x509[签发x509证书命令] -req[输入待签发证书] -in[输入待签发证书文件路径] -out[产生x509证书文件输出路径]
    # -signkey [密钥文件路径]
    # -CA[签发根证书] -CAkey[根证书密钥文件] -days[证书有效期] -CAserial[CA序列号文件]

    openssl x509 -req -in client.csr -out client.crt -signkey client.key -CA root.crt -CAkey root.key -days 365 -CAserial root.serial

    4、将客户端证书导出为windows可识别的格式.p12

    # pkcs12[生成PKS12格式证书命令] -export[导出文件] -clerts[仅导出client证书]
    # -in[输入的client证书文件路径] -inkey[client证书密钥文件路径] -out[导出PKS12格式文件路径]

    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

    在导出时可以设置密码,只有知道该密码才能将证书导入浏览器。

     5、将签名之后的证书文件client.crt导入至信任秘钥库中(这里由于没有去ca认证中心购买个人证书,所以只有导入信任库才可进行双向ssl交互,实验亲自验证过)
    keytool -import -alias client -trustcacerts  -storepass tomcat -file client.crt -keystore servertrust.jks
    重新拷贝信任密钥库文件servertrust.jks到tomcat配置文件指定的位置
    六、安装客户端证书并修改tomcat配置
    1、将p12格式的客户端证书导入浏览器(双击安装即可)
    2、将tomcat SSL配置部分clientAuth值改为“true”。
    3、实现SSL双向认证
    由于这里的证书均是自己生成的,所以浏览器会提示证书错误类的字样属于正常现象。
  • 相关阅读:
    增删改查
    全局配置文件mappers_sql映射注册
    全局配置文件<typeAliases>别名配置
    接口式编程小结
    Mybatis_接口编程
    Mybatis_HelloWord
    xml中标签含义
    Spring中Bean的基本概念
    ACM 第十四天
    ACM 第十三天
  • 原文地址:https://www.cnblogs.com/Before/p/4244167.html
Copyright © 2011-2022 走看看