大概思路:

使用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双向认证
由于这里的证书均是自己生成的,所以浏览器会提示证书错误类的字样属于正常现象。

Tomcat 实现双向SSL认证的更多相关文章

  1. 自定义SSL证书实现单双向ssl认证记录

    自定义SSL证书: 1.ca证书 #openssl genrsa -out ca.key 2048 #openssl req -new -key ca.key -out ca.csr #openssl ...

  2. SSL构建单双向https认证

    1.  SSL基本介绍 我们常常在使用网上银行时看到的连接都是以“https”开始的,那么这个https是什么呢?这其实是表示目前连接使用了SSL进加密,能保证客户端到服务器端的通信都在被保护起来,那 ...

  3. 使用 curl 进行 ssl 认证

    目录 SSL 认证 认证实现 问题解决 curl不支持 https SSL certificate problem, verify that the CA cert is OK curl: (60) ...

  4. mosquitto SSL认证

    [11]MQTT mosquitto 双向SSL认证配置方式 [12]MQTT mosquitto 单向SSL认证的配置方式 Mosquitto服务器的搭建以及SSL/TLS安全通信配置(比较可信) ...

  5. SSL 认证之后,request.getScheme()获取不到https的问题记录

    通过浏览器输入https://www.xxx.com,request.getScheme()获取到的确实http而不是https通过request.getRequestURL()拿到的也是http:/ ...

  6. RSA原理、ssl认证、Tomcat中配置数字证书以及网络传输数据中的密码学知识

      情形一:接口的加.解密与加.验签 rsa不是只有加密解密,除此外还有加签和验签.之前一直误以为加密就是加签,解密就是验签.这是错误的! 正确的理解是: 数据传输的机密性:公钥加密私钥解密是密送,保 ...

  7. 搭建私有CA并基于OpenSSL实现双向身份认证

    0x00 前言 互联网上的Web应用由于用户数目广泛,都是采用单向身份认证的,只需要客户端验证服务端的身份.但如果是企业内部的应用对接,客户端数量有限,可能就会要求对客户端也做身份验证,这时就需要一个 ...

  8. java中 SSL认证和keystore使用

    java中 SSL认证和keystore使用 2013-10-12 11:08 10488人阅读 评论(0) 收藏 举报   目录(?)[+]     好久没用过SSL认证了,东西久不用,就有点生疏. ...

  9. Apollo单向SSL认证(1)

    参考链接:https://www.cnblogs.com/benwu/articles/4891758.html keytool -genkey -alias mybroker -keyalg RSA ...

随机推荐

  1. HackerRank "Fair Rations"

    Another fun Greedy problem to work on: we simply go from first to second last person, as long someon ...

  2. NC营改增

    收票 select * from jzinv_receive  where vinvno='04888118' 1045select * from bd_corp where pk_corp='104 ...

  3. PHP手机,邮箱正则匹配

    /*此处用于验证手机*/ $phone_preg = '/^1[3|4|5|7|8]\d{9}$/'; $email_preg = '/^[a-zA-Z0-9_]+([.][a-zA-Z0-9_]+) ...

  4. 线程让出实验【RT-Thread学习笔记 4】

    API: rt_thread_yield 线程函数中调用,本线程释放MCU.如果此时有别的相同优先级的任务整处于等待状态,将获得MCU使用权. 线程让出就是给OS增加一个任务调度的机会. 创建两个线程 ...

  5. org.apache.catalina.LifecycleException tomcat 启动 maven 处处都是坑!!!

    问题1:tomcat不识别maven工程解决办法:project右击->Properties->Project Facets,选择Dynamic Web Module及其版本(tomcat ...

  6. js正则表达式学习

    //几种字符串操作:var str = 'abcdef'; alert(str.search('b')); //弹出1:返回的是b在str中的位置:如果找不到返回-1: alert(str.subst ...

  7. 个人JS零碎知识整理

    1."DOM2级事件"规范要求的事件流包括三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段 2.isNaN()       数字.空串.空格 返回false 变量是数字时返回fa ...

  8. require.js

    日期: 2012年11月 7日 http://www.ruanyifeng.com/blog/2012/11/require_js.html 这个系列的第一部分和第二部分,介绍了Javascript模 ...

  9. Silverlight 缓存控制策略

    通常我们用html或asp.net页面承载Silverlight包,由于浏览器缓存机制的存在,使得你的应用更新时,客户见到往往是旧版的程序,而完全禁止缓存,每次打开页面都要重新下载xap,对于体积较大 ...

  10. Ubuntu14.04 安装Gitlab

    安装ubuntu 操作系统 除了 openssh server 其它都不需要 配置软件源 root@gitlab:~# cat /etc/apt/sources.list deb http://mir ...