基于SSL协议的双向认证 - 双向认证 [3]
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]的更多相关文章
- 基于SSL协议的双向认证 - SSL协议 [1]
1 概要说明 在互联网通信方式中,目前用的最广泛的是HTTPS配合SSL和数字证书来保证传输和认证安全了. 2 详细介绍 2.1 HTTPS HTTPS全称:Hypertext Transf ...
- 如何让你的传输更安全--基于SSL协议的通信模式
之前发表在另一个平台的文章http://www.jointforce.com/jfperiodical/article/1218,现在发表到自己的博客上. 对于SSL/TLS协议,如果要每个开发者都自 ...
- 基于SSL协议的双向认证 - 数字证书 [2]
1.1 数字证书 1.1.1 概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...
- 【转】SSL协议、SET协议、HTTPS简介
一.SSL协议简介 SSL是Secure Socket Layer的缩写,中文名为安全套接层协议层.使用该协议后,您提交的所有数据会首先加密后,再提交到网易邮箱,从而可以有效防止黑客盗取您的用户名.密 ...
- open-falcon之使用mail-provider发邮件(支持smtp SSL协议)
一.首先确定go语言安装环境配置好 1.进入官网下载源码包 https://golang.org/dl/ 2.解压缩,配置环境变量 在/etc/profile最后加上export PATH=$PATH ...
- HTTPS 中双向认证SSL 协议的具体过程
HTTPS 中双向认证SSL 协议的具体过程: 这里总结为详细的步骤: ① 浏览器发送一个连接请求给安全服务器.② 服务器将自己的证书,以及同证书相关的信息发送给客户浏览器.③ 客户浏览器检查服务器送 ...
- 基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证
基于mosquitto的MQTT服务器---SSL/TLS 单向认证+双向认证 摘自:https://blog.csdn.net/ty1121466568/article/details/811184 ...
- mosquitto ---SSL/TLS 单向认证+双向认证
生成证书 # * Redistributions in binary form must reproduce the above copyright # notice, this list of ...
- 基于X.509证书和SSL协议的身份认证过程实现(OpenSSL可以自己产生证书,有TCP通过SSL进行实际安全通讯的实际编程代码)good
上周帮一个童鞋做一个数字认证的实验,要求是编程实现一个基于X.509证书认证的过程,唉!可怜我那点薄弱的计算机网络安全的知识啊!只得恶补一下了. 首先来看看什么是X.509.所谓X.509其实是一种非 ...
随机推荐
- BZOJ4653: [Noi2016]区间
传送门 UOJ上卡掉一个点,COGS上卡掉两个点..弃疗,不改了,反正BZOJ上过啦hhh 先把区间按长度递增排序.然后每次用线段树维护区间最大覆盖次数,用一个指针随便扫扫就行了. //NOI 201 ...
- python小打小闹之简陋版BBS
闲的蛋疼,索性写个东西玩,于是,写个类似于BBS的念头就开始了. 我们考虑到需要实现的功能: 1 只有登陆的用户才可以点赞,如果没有登陆,那么不可以点赞,点赞次数只可以为1. 2 只有登陆的用户可以评 ...
- Javascript面向对象编程
https://segmentfault.com/a/1190000002900676 介绍 和java这种基于类(class-base)的面向对象的编程语言不同,javascript没有类这样的概念 ...
- SQL总结二
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- vmware tools 在linux中的作用
VMware Tools是VMware虚拟机中自带的一种增强工具,相当于VirtualBox中的增强功能 是VMware提供的增强虚拟显卡和硬盘性能 以及同步虚拟机与主机时钟的驱动程序. 只有在VMw ...
- 忘记常访问网站密码怎么办?教你如何查看浏览器已保存的密码,如何简单查看Chome浏览器保存的密码?
利用场景: 同事或朋友外出有事,电脑未锁屏离开座位.可以利用这一间隙,查看Ta在Chrome浏览器上保存的账号密码 查看逻辑: 当我们要查看Chrome浏览器上保存的密码时,点击显示,会弹出一个对话框 ...
- Android onLowMemory()和onTrimMemory()
1. OnLowMemory OnLowMemory是Android提供的API,在系统内存不足,所有后台程序(优先级为background的进程,不是指后台运行的进程)都被杀死时,系统会调用OnLo ...
- Java——Swing
- cx_freeze 把 .py 打包成 .exe
1.安装 python-3.4.3 默认安装路径 C:\Python34 2.安装 cx_Freeze-4.3.3.win32-py3.4 3.运行 Python Version 3.4 regist ...
- Brew Command Not Found
安装了brew后,居然找不到brew命令.于是uninstall后再次install,居然还是Brew Command Not Found. 解决办法: http://stackoverflow.co ...