1      SSL双向认证的实现

这里是基于SSL和Tomcat配置实现的,配置方法如下:

1.1    生成CA数字证书

首先需要配置OPENSSL环境变量。

我的OPENSSL配置文件路径是“D:\OpenSSL-Win32\bin\openssl.cfg”。


1.1.1  生成CA私钥

Ø  说明:

CA作为一个权威机构,他本身也是使用证书来标识自己,CA本身也拥有私钥。在签发数字证书的过程中,CA的私钥主要用于加密用户证书请求中的用户信息及公钥。

Ø  命令:

openssl genrsa -out d:\ca\ca-key.pem 1024

Ø  运行结果:

Ø  运行结果:

该命令会产生长度为1024字节的私钥文件“ca-key.pem”。

1.1.1  生成CA证书请求文件

Ø  说明:

创建CertificateSecure Request证书请求文件。

Ø  命令:

openssl req -new -out d:\ca\ca-req.csr -key d:\ca\ca-key.pem -config D:\OpenSSL-Win32\bin\openssl.cfg

Ø  运行结果:

Ø  运行结果:

生成CSR文件“ca-req.csr”

Ø  注意:

在生成过程中,“CommonName (e.g. server FQDN or YOUR name) []:”需要输入你所希望的根证书颁发结构名称,如BOCHAO字样等。

1.1.1  生成CA证书自签名文件

Ø  说明:

使用CA私钥“ca-key.pem”文件对“ca-req.csr”请求文件签名。

Ø  命令:

openssl x509 -req -in d:\ca\ca-req.csr -out d:\ca\ca-cert.pem -signkey d:\ca\ca-key.pem -days 365

Ø  运行结果:

生成自签名CA证书文件“ca-cert.pem”文件,“ca-cert.pem”文件即为CA根证书,可将其下发到客户端,作为根证书导入。

1.1.1  生成CA证书浏览器支持格式

Ø  说明:

生成Windows下浏览器支持的CA根证书文件“CARoot.cer”。

Ø  命令:

openssl x509 -in d:\ca\ca-cert.pem -inform PEM -out D:\ca\CARoot.cer -outform DER

Ø  运行结果:

生成了“CARoot.cer”文件为“cer”格式的CA根证书文件。

1.1    生成服务器证书库

服务器证书和客户端证书生成略有不同,这是由于服务器对证书格式与客户端证书格式要求不同导致,对于Tomcat、WebLogic、WebSphere服务器通常需要一种JKS格式的文件,在该文件中,保存有服务器私钥、服务器证书(公钥)以及服务器根证书链(从RootCA一直到服务器证书颁发机构的一系列CA证书列表)。

1.1.1  创建服务器证书库

Ø  说明:

为了保证证书的真实性,需要给证书签名,通常这个是由第三方的CA(Certification Authentication)来签发,这里我们使用自签名的证书。

(1). 此命令在当前目录下生成一个密钥库文件“fspdrs-server.jks”,该密钥库文件密码为“password”

(2). 此命令还产生一个密钥对(其私钥别名为“serverkey”)和一个包含公钥信息的证书,证书的主题信息为“CN=192.168.2.38,OU=博超,O=博超,L=北京,ST=北京市,c=zh”,同时,该证书由私钥签名。

(3). 证书跟私钥绑定形成了一条密钥实体存储在“fspdrs-server.jks”文件中,可以通过别名“serverkey”来访问证书。

Ø  命令:

keytool -genkey -alias serverkey -keystore d:\ca\fspdrs-server.jks -keyalg RSA -dname "CN=192.168.2.38,OU=博超,O=博超,L=北京,ST=北京市,c=zh" -storepass password -keypass password

Ø  运行结果

生成了“fspdrs-server.jks”文件。

Ø  注意:

(1). 在输入上述的“名字与姓氏”时,需要注意所输入的值应该与服务器IP或者域名一致,否则在客户端验证服务器证书时会认为该证书与指定的服务器实体不匹配,如果是IE就会弹出一个窗口提示用户是否信任该证书。

(2). 这里要求“keystore”和“certificate”的密码一致,这是Tomcat的约束。

1.1.1.1 创建服务器证书库的CSR文件

Ø  说明:

生成服务器证书的请求文件为“server.csr”。把该请求文件发送给证书颁发机构,该机构将会验证请求中的实体信息,然后实现签证,因为我们自己做了CA,所以签证这一步也是我们自己来做。

Ø  命令:

keytool -certreq -alias serverkey -sigalg MD5withRSA -file d:\ca\server.csr -keypass password -keystore d:\ca\fspdrs-server.jks -storepass password

Ø  运行结果:

生成服务器端证书的CSR请求文件“server.csr”。

1.1.1.1 使用CA来签发服务器证书库请求文件

Ø  说明:

使用我们自制的CA数字证书来签发服务器根证书请求文件。

Ø  命令:

openssl x509 -req -in d:\ca\server.csr -out d:\ca\server-cert.pem -CA d:\ca\ca-cert.pem -CAkey d:\ca\ca-key.pem -CAserial d:\ca\ca-cert.srl -CAcreateserial -days 365

Ø  运行结果:

生成CA签发的根证书文件“server-cert.pem”,和在签发中生成一个CA的“ca-cert.srl”文件。

1.1.1  将CA证书导入到服务器证书库文件中。

Ø  说明:

将CA证书的“ca-cert.pem”文件导入到服务器证书库(密钥库中)“fspdrs-server.jks”文件中。

Ø  命令:

keytool -importcert -alias RootCA -v -file d:\ca\ca-cert.pem -keystore d:\ca\fspdrs-server.jks -storepass password

Ø  运行结果:

1.1.1  将CA签发的服务器请求文件导入服务器证书库(密钥库)文件中。

Ø  说明:

将CA签发的服务器端证书“server-cert.pem”导入服务器端根证书(密钥库)“fspdrs-server.jks”中。

Ø  命令:

keytool -importcert -alias serverkey -v -file d:\ca\server-cert.pem -keystore d:\ca\fspdrs-server.jks -storepass password

Ø  执行结果:

Ø  注意:

(1). 首先导入CA根证书链,最后导入服务器根证书。

(2). 导入服务器时的别名必须与生成JKS库时的别名相同一致。

1.1.1  查看服务器端根证书库文件

Ø  说明:

查看服务器证书库(密钥库)证书文件。

Ø  命令:

keytool -list -v -keystore d:\ca\fspdrs-server.jks -storepass password

1.1    生成客户端证书

客户端证书可以使用OPENSSL来制作也可以是用KEYTOOL来制作,使用KEYTOOL比较麻烦,而且签证必须由OPENSSL来制作,所以这里全部使用OPENSSL来制作。

1.1.1  生成客户端证书

Ø  说明:

生成一个客户端证书,例如为DCZ用户生成一个客户端证书。

Ø  命令:

openssl genrsa -out d:\ca\dcz\DCZ-key.pem 1024

Ø  运行结果:

在当前目录中会生成一个“DCZ-key.pem”文件。

1.1.1  生成客户证书请求文件

Ø  说明:

生成“DCZ-key.pem”客户端证书请求文件“DCZ-req.csr”文件。

Ø  命令:

openssl req -new -out d:\ca\dcz\DCZ-req.csr -key d:\ca\dcz\DCZ-key.pem -config D:\OpenSSL-Win32\bin\openssl.cfg

Ø  运行结果:

生成过程中如果不是必须填写的项目,可以直接使用“.”表示忽略该字段。

1.1.1  使用CA证书来签发CSR文件“DCZ-req.csr”

Ø  说明:

生成CA签发的客户端证书“DCZ-cert.perm”文件。

Ø  命令:

openssl x509 -req -in d:\ca\dcz\DCZ-req.csr -out d:\ca\dcz\DCZ-cert.pem -signkey d:\ca\dcz\DCZ-key.pem -CA d:\ca\ca-cert.pem -CAkey d:\ca\ca-key.pem -CAcreateserial -days 365

Ø  运行结果:

生成CA签发的客户端证书“DCZ-cert.pem”文件。

1.1.1  生成客户端证书的其它格式

Ø  说明:

这步把客户端证书(公钥)与私钥捆绑在一起,生成DCZ.pfx文件,该文件连同CA根证书一起发送给客户。

导入客户端证书为浏览器支持的.PFX格式的证书DCZ.pfx文件。

Ø  命令:

openssl  pkcs12 -export -clcerts -in d:\ca\dcz\DCZ-cert.pem -inkey d:\ca\dcz\DCZ-key.pem -out d:\ca\dcz\DCZ.pfx -password pass:DCZpassword

Ø  运行结果:

生成“DCZ.pfx”客户端证书文件。

1.1    配置双向认证服务器

1.1.1 配置SSL的Tomcat双向认证服务器

找到你要配置的Tomcat服务器,进到根目录conf下,直接编辑server.xml文件,找到文件中的这段代码,实际上它是被注释的。

<!-- <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />-->

我们上面这段代码注释打开,并修改为如下:

<Connector port="16001"
SSLEnabled="true"
clientAuth="true"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
compression="on"
compressionMinSize="2048"
keystoreFile="conf\certificate\fspdrs-server.jks"
keystorePass="password"
maxThreads="150"
noCompressionUserAgents="gozilla, traviata"
protocol="org.apache.coyote.http11.Http11NioProtocol"
scheme="https"
secure="true"
sslProtocol="TLS"
truststoreFile="conf\certificate\fspdrs-server.jks"
truststorePass="password"/>

将我们生成的证书中的“fspdrs-server.jks”服务器证书库文件放入上面代码指定的路径下。

好,修改完毕,保存退出,直接启动Tomcat等待连接测试。

1.1.1 安装客户端证书

(1). 导入CA证书文件:

点击导入按钮,找到我们生成的CARoot.cer浏览器支持的格式文件:

导入成功会出现如下提示:

点击“是”即可安装成功,安装成功后会在浏览器的“受信任的根证书颁发机构”中发现安装的CA证书。

(2). 安装客户证书

这里我为自己生成了一个客户端证书“DCZ.pfx”,直接双击该文件即可安装:

点击“下一步”:

输入我们生成证书的密码:

点击“下一步”:

至此,完成所有的操作。

下面去浏览器中直接输入https://192.168.2.38:16001/看看有何反应:

在浏览器访问安全的链接时候会弹出上面证书确认弹框,说明配置成功,至此全部配置完毕!

基于SSL协议的双向认证 - 双向认证 [3]的更多相关文章

  1. 基于SSL协议的双向认证 - SSL协议 [1]

    1  概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2  详细介绍 2.1    HTTPS HTTPS全称:Hypertext Transf ...

  2. 如何让你的传输更安全--基于SSL协议的通信模式

    之前发表在另一个平台的文章http://www.jointforce.com/jfperiodical/article/1218,现在发表到自己的博客上. 对于SSL/TLS协议,如果要每个开发者都自 ...

  3. 基于SSL协议的双向认证 - 数字证书 [2]

    1.1    数字证书 1.1.1   概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...

  4. 【转】SSL协议、SET协议、HTTPS简介

    一.SSL协议简介 SSL是Secure Socket Layer的缩写,中文名为安全套接层协议层.使用该协议后,您提交的所有数据会首先加密后,再提交到网易邮箱,从而可以有效防止黑客盗取您的用户名.密 ...

  5. open-falcon之使用mail-provider发邮件(支持smtp SSL协议)

    一.首先确定go语言安装环境配置好 1.进入官网下载源码包 https://golang.org/dl/ 2.解压缩,配置环境变量 在/etc/profile最后加上export PATH=$PATH ...

  6. HTTPS 中双向认证SSL 协议的具体过程

    HTTPS 中双向认证SSL 协议的具体过程: 这里总结为详细的步骤: ① 浏览器发送一个连接请求给安全服务器.② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器.③ 客户浏览器检查服务器送 ...

  7. 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证

    基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/811184 ...

  8. mosquitto ---SSL/TLS 单向认证+双向认证

    生成证书 # * Redistributions in binary form must reproduce the above copyright #   notice, this list of ...

  9. 基于X.509证书和SSL协议的身份认证过程实现(OpenSSL可以自己产生证书,有TCP通过SSL进行实际安全通讯的实际编程代码)good

    上周帮一个童鞋做一个数字认证的实验,要求是编程实现一个基于X.509证书认证的过程,唉!可怜我那点薄弱的计算机网络安全的知识啊!只得恶补一下了. 首先来看看什么是X.509.所谓X.509其实是一种非 ...

随机推荐

  1. Django中Celery的实现介绍(一)

    Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...

  2. 怎样用命令行编译C#程序

    1. 把程序拷贝至记事本 2.另存为*cs格式 3.找到VS2015提供的命令提示 4.要把命令行指向程序所在的目录(可以有个小软件) 如果在其他的盘符,先敲D:,然后再cd 5.输入csc hell ...

  3. asp.net ListBox 移除操作的思路

    ArrayList arrRight = new ArrayList(); protected void ImageButton1_Click(object sender, ImageClickEve ...

  4. QT 的下载地址

    http://blog.csdn.net/friendan/article/details/44873347

  5. GUI1_综合介绍

    最终比较,选择pyqt用于GUI开发 https://pythonspot.com/en/gui/ 图形化界面可以使用PyQt5, PyQt4, wxPython or Tk.模板 Graphical ...

  6. C#----格式化字符串的操作

    class Program { static void Main(string[] args) { //DateTime dt = DateTime.Now; //Console.WriteLine( ...

  7. webpack入坑之旅(一)入门安装

    学习一个新的东西,首先第一步就是安装,有时候会遇到各种奇葩的问题 至于什么是webpack我这里就不介绍了,请参考官网:https://github.com/webpack/webpack 安装 前提 ...

  8. #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0

    头文件处理 #import <UIKit/UIKit.h> #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0 #else #imp ...

  9. 部署lamp服务器

    系统:CentOS 6.5 64位 1.卸载旧版本软件 rpm -qa | grep mysql #查询是否已经安装MySQL,如有执行下面的操作将其全部删除 rpm -e mysql --nodep ...

  10. Senparc.Weixin.MP.Sample 配置redis服务器密码

    redis.windows-service.conf中加  requirepass 你的密码 <!-- Cache.Redis连接配置 --> <add key="Cach ...