设为首页 收藏本站
查看: 2393|回复: 1

[经验分享] Tomcat和Openssl构建HTTPS双向认证

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-12-6 08:53:43 | 显示全部楼层 |阅读模式
折腾了两天终于搞好了,查看了很多资料并尝试了上十次才终于配置好,为了大家不走弯路,特写此文
一、  服务端环境

CNETOS-6.5

Tomcat 7

jdk7

openssl-1.0.2-beta1.tar.gz
二、源码安装及证书申请与签发

将openssl-1.0.2-beta1.tar.gz copy到/home目录下

解压
tar -zxvf openssl-1.0.2-beta1.tar.gz

cd openssl-0.9.8e


./config --prefix=/usr/local --openssldir=/usr/local/openssl


make&& make install

(编译安装过程需要一点时间)

从安装包里拷贝demoCA到安装目录
cp /home/openssl-0.9.8e/apps/demoCA//usr/local/openssl/ -rf
cd /usr/local/openssl/demoCA
mkdir newcerts
cd /usr/local/openssl

mkdir ca

mkdir server

至此openssl目录下是这样







编辑openssl.cnf文件,找到[ req_distinguished_name ]标签,填写一下默认信息,随便填写(名称为XXX_default的,这些都是默认值),以便在之后创建证书的时候不用再敲一遍,直接回车跳过。



1、创建服务器证书、客户端证书以及CA
openssl req -new -x509 -keyout ca/ca.key -out ca/ca.crt -config openssl.cnf-days 3650 提示设置密码(CA 的私钥设置为:cncc.server)


提示输入信息(之前已经修改过openssl.cnf文件,这里一路回车,到填写your name时,输入你要配置的服务器端ip(PS:https双向认证时,浏览器会将自己要访问的ip地址与服务器端根证书中的CN值比较看是否相同,以确保浏览器访问的是正确的地址 ),其他空,接着一路回车。


2、生成服务器端私钥和证书请求
openssl genrsa -out server/server.key 1024
openssl req -new -key server/server.key -out server/server.csr -configopenssl.cnf

提示输入信息,同上,yourname填写tomcat所在的服务器ip

3、生成客户端私钥和请求
openssl genrsa -des3 -out private/privatekey.key 1024
cncc.client(客户端私钥)
openssl req -new -key private/privatekey.key -out private/privatekey.csr-config openssl.cnf  提示设置密码cncc.client
提示输入信息,同上,your name 输入client
4、通过CA签发证书
4.1、签发服务器端证书server.crt
openssl ca -in server/server.csr -out server/server.crt -cert ca/ca.crt-keyfile ca/ca.key -config openssl.cnf
提示你设置密码,输入cncc.server  回车后,出现y/n的选项,输入yes并回车,再次输入yes并回车

4.2、签发客户端端证书privatekey.crt
opensslca -in private/privatekey.csr -out private/privatekey.crt -cert ca/ca.crt-keyfile ca/ca.key -config openssl.cnf
提示你设置密码,输入cncc.server回车后,出现y/n的选项,输入yes并回车,再次输入yes并回车

此时,控制台会提示你数据已更新到database,好了,咱们接着继续


5、生成pkcs12格式证书
在tomcat中实现双向认证有时需要pkcs12格式的证书(该证书包含根证书、服务器端或客户端的证书和密钥文件)


5.1、生成pkcs12服务器证书tomcat.p12,设置密码为cncc.tomcat
openssl pkcs12 -export -in server/server.crt -inkey server/server.key -outserver/tomcat.p12 -name tomcat -CAfile ca/ca.crt -caname root -chain
cncc.tomcat (后边Tomcat的配置文件中需要)



5.2、生成pkcs12客户端证书client1.p12,设置密码为cnccclient

openssl pkcs12 -export -in private/privatekey.crt -inkey private/privatekey.key-out private/client1.p12 -name client1 -chain-CAfile ca/ca.crt
输入密码cncc.client  并回车,此时会提示你要设置客户端导入密码 ,各位童鞋可以输入任何你想要得密码,此处我们输入cncc  回车.这个密码是客户端浏览器导入证书时要输入的密码



6、有时可能需要别的格式的证书

生成pem格式证书

cat private/privatekey.crt  private/privatekey.key>private/privatekey.pem

cat server/server.crt  server/server.key > server/server.pem

(目前我没有用到这些)
三、tomcat实现双向认证
按照以上方法证书生成后,我们再配置TomCat即可实现双向认证。此时服务器端我们只用到服务器端pkcs12格式的证书tomcat.p12和CA的根证书ca.crt即可,客户端用到pkcs12格式的证书client1.p12。



1、将以上创建的证书server.crttomcat.p12拷贝到tomcat主目录下的conf文件夹下
cp server/server.crt server/tomcat.p12  到你所在tomcat/conf目录下

2、创建服务器信任的CA证书库
把ca.crt证书导入信任证书库,命令行模式进入tomcat主目录下的conf目录,执行以下命令:
cd /home/apache-tomcat-6.0.35/conf/
keytool -keystore truststore.jks -keypass cncc.trust -storepass cncc.trust -alias ca -import-trustcacerts -file /usr/local/openssl/ca/ca.crt(PS:keytool 是jdk自带的工具,别告诉我你没安装jdk,并设置了path环境变量)

*如果出现ca已经存在的错误,keytool -delete -alias ca-keystore truststore.jks  cncc.trust(keytool的密码,上一次使用时使用的密码)

可以用以下命令查看信任证书库内容:
keytool -keystore truststore.jks -keypass cncc.trust -storepass cncc.trust -list -v

(
参考修改keytool的密码:
keytool -storepasswd -new cncc.trust  -storepass cncctrust -keystore truststore.jks
其中-storepass指定原密码,-new指定新密码。
keytool -delete -alias ca -keystore truststore.jks  要求输入的密码就是上边修改的密码

)



3、配置Tomcat支持HTTPS双向认证
修改tomcat的conf目录里的server.xml文件($TOMCAT_HOME/conf/server.xml),找到类似下面内容的配置处,添加配置如下:(主要是标红部分)

protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="conf/tomcat.p12" keystorePass="cncc.tomcat"keystoreType="PKCS12"
truststoreFile="conf/truststore.jks" truststorePass="
cncc.trust" truststoreType="JKS"
/>

配置好后,重启tomcat,











访问方式 https://IP:端口号/
这时是无法连接到服务端的,显示如下:






需要服务端提供client1.p12证书(之前颁发的,在openssl/private目录下),将此证书导入,步骤如下:(本人浏览器IE8)


1、工具->Internet选项->内容->证书


2、点导入,下一步


选择那个client1.p12证书,下一步
3、提示输入导入密码

下一步,下一步,完成


4、关闭浏览器,重新开再次访问,提示身份验证

确定
OK可以访问


结束
  



附件:http://down.运维网.com/data/2364112


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-643847-1-1.html 上篇帖子: 单台主机nginx+tomcat+mencached部署测试 下篇帖子: 同一tomcat配置多域名
累计签到:13 天
连续签到:1 天
发表于 2019-7-31 14:56:05 | 显示全部楼层
谢谢,步骤很明确,但报此网站无法提供安全连接  不接受您的登录证书,或者您可能没有提供登录证书。
请尝试联系系统管理员。
ERR_BAD_SSL_CLIENT_AUTH_CERT

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表