OpenSSL的核心的本质在于可以由用户自己来进行证书的签发,自定义证书是不被谷歌支持的,要想玩自定义证书就要通过火狐浏览器。
OpenSSL简介
为网络通信提供安全及数据完整性的一种安全协议,囊括了主要的密码算法、常用的密钥和证书封装管理功能以及SSL协议,并提供了丰富的应用程序供测试或其他目的使用。
通过在一定范围内部署一台CA(Certificate Authority)服务器(CA就是认证授权服务器),可以实现局域网内的证书认证和授权,保证数据传输的安全性;也可以通过具体的部署实践,了解国际上大型CA机构的工作原理,为企业级的证书管理提供知识积累。
OpenSSL套件的组成部分有:
- libcrypo:通用功能的加密库
- libssl:用于实现TSL/SSL功能的库
- openssl
- 企业向CA认证中心发送请求,CA可以处理请求和吊销不要的证书。而后CA会给企业发送一个已签署的证书(可以理解为服务器证书),表示该企业的站点已经加入到CA的处理列表中,能够保证安全操作。
- 而后企业可以把服务器证书发送给个人,个人之间如果要想通讯,需要通过证书进行互相的通讯,所以必须得到彼此的证书。帧数都是由进行统一认证和管理的。
- 当证书失效之后,将进入吊销列表
整个CA的处理流程也就是整个OpenSSL的处理流程,也就是说在整个OpenSSL流程中所有的操作模式都会按照标准的CA结构完成,需要生成一系列的层级证书(所有的证书一定是逐步向下签发的)。
如果要想认可根证书,就必须把证书放到浏览器上,因为所有用户的操作都需要进行CA认证。
证书签发
证书签发顺序:由右向左
整个生成完毕之后还需要将证书转换为Java可以使用的证书格式,而后才可以在Tomcat中进行配置。
1. 证书签发流程
在Linux系统里面已经集成了OpenSSL组件:
本次的开发为了方便的进行证书的下载,直接将所有的证书就生成在ftp指定的目录下(/srv/ftp)
(1)签发根证书
本次生成的证书为根证书,那么将根证书保存在“/srv/ftp/cas”目录之中。
-
生成CA密钥对:生成一个使用RSA编码的密钥信息,而后生成的文件保存到“/srv/ftp/cas/cakey.pem”,该密钥对的长度为2048个字节。
-
生成根证书的签发申请:在证书访问的时候必须以域名的形式出现(千万不要使用ip),这个域名应该是你自己的。现在如果要进行本机的模拟,那么需要通过windows下的hosts进行修改。这里
-subj /CN=cas.com
指定了我们最后要访问的域名就是cas.com。
-
根证书签发:
-day 3650
指定了证书的有效时间为十年
(2)签发服务器端证书
�
为了与根证书的保存区分,建议建立一个目录:/srv/ftp/cas/server。
流程跟之前一样,但是服务器证书必须依靠CA根证书完成。
- 生成服务器私钥:服务器端生成私钥的时候需要设置一个密码,密码为:mldnjava。
- 生成服依然需要输入务器端证书的签发申请,创建的时候依然需要输入之前的密码。
- 生成服务器端证书的签发申请,有效期为10年。从命令可以看到客户端证书生成的时候需要用到CA根证书(ca.cer)。
此时有了服务器端的证书之后才可以创建客户端证书。
(3)签发客户端端证书
建立一个目录保存客户端证书信息:/srv/ftp/cas/client。
- 生成客户端私钥:生成的时候输入密码:mldnjava。
- 生成客户端的证书申请
- 生成客户端的签发证书:从命令可以看到客户端证书生成的时候需要用到CA根证书(ca.cer)
此时最需要注意的是,该证书只针对于“cas.com”有效
(4)签发Java证书
现在使用了OpenSSL生成的数字证书和私钥,如果要想在Java的环境下使用,需要将其转换为“PKCS#12”的编码格式的密钥文件才可以被Java的keytool工具所管理。
前提:此时Java端的证书由于需要在Tomcat上使用,那么最终的证书建议在Tomcat的目录中保存,而Tomcat的路径为“/usr/local/tomcat”。
- 生成客户端证书:客户端的证书随后是需要发给客户端浏览器的。
- 生成服务器端证书:主要由Tomcat使用。
- 将现在生成的服务器端证书导入到本机的受信认证证书,可以看到这个证书存到了/usr/local/tomcat目录下了。那么此时JDK就表示当前要使用的证书已经得到了认可。
- 查看所有的证书信息:
随后还需要在客户端进行证书的配置。
2. Tomcat配置HTTPS
Tomcat本身支持https访问的协议处理,当然如果要想进行https的访问,那么一定要有与之匹配的服务器证书。我们已经生成了Java能够匹配认证证书ca-trust.p12,那么我们就用这个证书来处理。
本配置分为两种情况:单向认证、双向认证。
(1)Tomcat单向认证
所谓的单向认证指的是只是在服务器端提供有一个公共的证书,所有客户端连接之后都可以获得这个公钥,加密后,服务器端可以利用私钥进行解密处理。这是一个比较常见的做法,因为你不可能为每一个客户端去配置一个自己的密钥对。
【配置流程】
- 打开Tomcat的配置文件:/usr/local/tomcat/conf/server.xml,在这个配置文件里面要追加下面的配置信息:
- 443端口是HTTPS的访问端口;
- 单向认证clientAuth设置为"false";
- 启动Tomcat服务器
/usr/local/tomcat/bin/catalina.sh start
- 浏览器访问https
客户端上现在根本就无法使用google的浏览器进行访问。当然如果现在不进行任何的配置,任何的浏览器都无法访问。
如果要想访问则需要将ca根证书配置到浏览器之中,同时还需要为整个的访问添加域名(cas.com)。
- 将ca.cer的根证书配置到浏览器的可信任证书上
- 4.1 谷歌浏览器——>“选项”——>“高级”——>“证书”——>“查看证书”——>“证书机构”——>“导入”
- 4.2 这个根证书只对cas.com有效,所以要修改host文件,配置cas.com的映射
192.168.122.203 cas.com
- 浏览器重新启动后,输入:https://cas.com
出现了绿色的锁就表示现在我的是合法的https访问处理。
(2)Tomcat双向认证
单向认证对一般的服务器处理可以,但是要做网银的话就必须双向认证。
如果是双向认证你必须配置客户端证书(client.p12)。
【配置流程】
- 修改Tomcat的配置文件:/usr/local/tomcat/conf/server.xml,在这个配置文件里面要追加下面的配置信息:
- 启动Tomcat服务器
- 配置完host之后,浏览器访问https
此时访问浏览器会发现如下错误,根本访问不了。
所以需要在客户端浏览器上配置客户端的访问证书(client.p12):谷歌浏览器——>“选项”——>“高级”——>“证书”——>“查看证书”——>“证书机构”——>导入client.p12
然后重新启动浏览器就可以访问了:
网友评论