CA双向认证

一、双向认证

CA认证有单向认证和双向认证,在我们日常网页浏览中,我们接触到的大多数是单向认证,而在一些银行系统等对安全性要求比较高的系统,会采用双向认证。

单向认证只是客户端(浏览器)认证服务端(例如tomcat等), 双向认证指的是服务端和客户端之间相互都要认证(在浏览器体现为需要安装进证书)。

https的双向认证大概过程(摘自http://blog.chinaunix.net/uid-26335251-id-3508651.html):

1 浏览器发送一个连接请求给安全服务器。
2 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器。
3 浏览器检查服务器送过来的证书是否是由自己信赖的 CA 中心所签发的。如果是,就继续执行协议;如果不是,客户浏览器就给客户一个警告消息:警告客户这个证书不是可以信赖的,询问客户是否需要继续。
4 接着客户浏览器比较证书里的消息,与服务器刚刚发送的相关消息是否一致,如果是一致的,客户浏览器认可这个服务器的合法身份。
5 服务器要求客户发送客户自己的证书。收到后,服务器验证客户的证书,如果没有通过验证,拒绝连接;如果通过验证,服务器获得用户的公钥。
6 客户浏览器告诉服务器自己所能够支持的通讯对称密码方案。
7 服务器从客户发送过来的密码方案中,选择一种加密程度最高的密码方案,用客户的公钥加过密后通知浏览器。
8 浏览器针对这个密码方案,选择一个通话密钥,接着用服务器的公钥加过密后发送给服务器。
9 服务器接收到浏览器送过来的消息,用自己的私钥解密,获得通话密钥。
10 服务器、浏览器接下来的通讯都是用对称密码方案,对称密钥是加过密的。

二、搭建CA证书颁发中心

1 创建rsaCA目录

mkdir rsaCA

mkdir -p ./rsaCA/{private,newcerts} && \

    touch ./rsaCA/index.txt && \

    touch ./rsaCA/serial && \

echo 01 > ./rsaCA/serial

touch rsaCA/index.txt.attr

把openssl.cnf放到rsaCA目录下

2 生成ca私钥

openssl genrsa -out ./rsaCA/private/cakey.pem 2048

3 生成证书请求

   openssl req -new -days 3650 -key ./rsaCA/private/cakey.pem -out careq.pem -config ./rsaCA/openssl.cnf

 

4 根据CA私钥生成CA的自签名证书

openssl ca -selfsign -in careq.pem -out ./rsaCA/cacert.pem -extensions v3_ca -config ./rsaCA/openssl.cnf

 

三、生成客户端证书

1 客户端私钥生成证书签名请求( cacsr.cer为请求证书,client_crt.cer为签名证书)

    生成RSA私钥

openssl genrsa -out client.pem 2048

    生成证书请求

   openssl req -new -days 3650 -key client.pem  -out client_csr.pem  -config ./rsaCA/openssl.cnf

2.使用CA的私钥和证书对用户证书签名(openssl.cnf为gmssl/ssl目录下的配置文件)

openssl ca -in client_csr.pem  -out client_cert.cer  -extensions v3_ca -config ./rsaCA/openssl.cnf

 

四、生成服务端证书(这里使用的是tomcat)

1 生成服务器证书

使用keytool为Tomcat生成证书,假定目标机器的域名是localhost或者“192.168.1.1”,keystore文件为tomcat.keystore,口令为“logiscn”,使用如下命令生成:

keytool -genkey -v -alias tomcat -keyalg RSA -keystore tomcat.keystore -dname "CN=192.168.1.1,OU=logiscn,O=logis,L=beijing,ST=beijing,C=CN" -validity 3650 -storepass logiscn -keypass logiscn

2 将CA机构自签名证书导入tomcat中

keytool -import -alias ca -v -file ./rsaCA/cacert.pem -keystore /root/rsa/tomcat.keystore -storepass logiscn

3 将客户端证书导入tomcat中

keytool -import -alias tianli -v -file /root/CA/test/client_crt.cer -keystoretomcat.keystore -storepass logiscn

4 配置Tomcat服务器
打开Tomcat根目录下的/conf/server.xml,找到如下配置段,修改如下:
打开注释
   <Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        clientAuth="true" sslProtocol="TLS"
        keystoreFile="/root/rsa/tomcat.keystore" keystorePass="logiscn"
        truststoreFile="/root/rsa/tomcat.keystore" truststorePass="logiscn" />

其中,clientAuth指定是否需要验证客户端证书,如果该设置为“false”,则为单向SSL验证,SSL配置可到此结束。如果clientAuth设置为“true”,表示强制双向SSL验证,必须验证客户端证书。如果clientAuth设置为“want”,则表示可以验证客户端证书,但如果客户端没有有效证书,也不强制验证。

5 重启tomcat

 

五、实现类似银行U盾的操作

以前用过网银的朋友们可能知道,在我们登录网银的时候是需要插入一个U盾的,其实他也是一个双向认证的原理。在这里,我们可以借助第三方工具u-key来实现。

可以购买市面上现成的u-key,将上述做成的客户端证书导入u-key中,在设置u-key的密码,这样就可以实现客户想要访问服务器,必须拥有u-key以及登录密码才可访问的功能了。

 

附:

openssl一些用法

显示证书信息。

cacert.pem为已加签后的证书文件

opensslx509 -text -noout -in cacert.pem

显示申请加签的证书信息

cacsr.pem为申请加签的文件

openssl req -in cacsr.pem -noout -text

显示公私钥信息

cakey.pem为私钥文件

openssl pkey -pubout -in cakey.pem -noout-text

由私钥文件导致公钥命令

cakey.pem为私钥文件,public.pem为生成的公钥文件

openssl pkey -pubout -in cakey.pem -out public.pem

显示公钥文件的公钥信息

public.pem为公钥文件

openssl pkey -pubin -in public.pem -noout -text

提取用户证书:

openssl pkcs12 -in test.p12 -clcerts -nokeys -out cert.pem  //pem格式

openssl pkcs12 -in test.p12 -clcerts -nokeys -out cert.crt  //crt格式

如果需要携带秘钥,则去掉 -nokeys

openssl pkcs12 -in test.p12 -clcerts  -out cert.pem  //pem格式

openssl pkcs12 -in test.p12 -clcerts  -out cert.crt  //crt格式

提取私钥:

openssl pkcs12 -in test.p12 -nocerts -out key.pem

将证书、私钥转换为p12格式:

gmssl pkcs12 -export -clcerts -in client_cert.cer –inkey client.pem -out

 

一关于keytool的一些指令

https://spdx4046.iteye.com/blog/1554577

openssl指令部分说明:

https://zhuanlan.zhihu.com/p/26646377

openssl配置文件说明:

https://www.cnblogs.com/f-ck-need-u/p/6091027.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值