CA双向认证完整实现步骤(附java客户端代码)
⼀、基础概念
注:以下概念除专业名词外,均为个⼈理解,不具备权威性。
1、什么是系统安全管理
置于公⽹的系统,通常都需要⼀定的安全管理,据我个⼈理解,这⾥的安全管理主要分三个⽅⾯:
⼀是应⽤内的权限控制,⽐如具体应⽤的⽤户名、密码等;
⼆是应⽤数据传输过程中的安全机制,例如各种报⽂的加解密⽅案;
三是数据传输前的通讯安全机制,保证通讯双⽅都是可靠可信任的,PKI就是其中⼀个解决⽅案。
2、什么是PKI
PKI是 Public Key Infrastructure的简称,意思是公钥基础设施。
公钥基础设施是提供公钥加密和数字签名服务的系统或平台,⽬的是为了管理密钥和证书。通过证书和秘钥来确认通讯双⽅是否可信任。
3、什么是CA
CA是Certificate Authority的简称,即证书的签发机构,它是PKI的核⼼。
正常情况来说,CA是具有权威性的机构,通过CA获取证书需要给钱。
但是有的时候可能不想⽤CA机构的证书,⼜想要使⽤https站点,那么可能就需要⾃⼰⽣成证书,但是这种证书浏览器是认为不安全的,本⽂档后边的具体步骤即针对这种场景。
4、什么是https
https是http+ssl,通俗点说,就是采⽤http通讯的安全传输协议,⽤来保证http传输过程中数据的机密性、完整性和可靠性,ssl需要证书。gps开发板
5、单向认证
⽹络通讯是双向的,但是安全认证不⼀定都是双向。⼤多数情况下可能都是单向的,只需要客户端确认服务端是可靠的,⽽服务端不管客户端是否可靠。即客户端,⽐如浏览器会验证服务端证书,服务端不需要客户端证书。
6、双向认证
双向认证相对于单向认证,即客户端需要确认服务端是否可信,服务端也需要确认客户端是否可信。双⽅都要验证对⽅的证书。
⼆、实现步骤
1、环境
本次技术调研过程全程都在⾃⼰的电脑上,采⽤物理机加虚拟机的⽅式:
物理机:win8+ie
虚拟机:redhat6.4+nginx+tomcat+openssl
2、nginx安装
2.1、安装包准备
nginx安装需要依赖其他的⼀些组件,⽹上说有以下三个必要依赖:
openssl
pcre
zlib
但实际安装过程发现只有openssl是必要的,其他两个可以排除,因此实际安装时下载了两个安装包:
nginx-1.12.
openssl-1.0.
照相怎么用伦勃朗光
2.2、安装openssl
2.2.1、解压
tar -zxvf openssl-1.0.
2.2.2、配置
进⼊解压后⽬录
./configure
2.2.3、编译
make
2.2.4、安装
make install
wordpress连接数据库错误2.3、安装nginx
2.3.1、解压
tar -zxvf nginx-1.12.
2.3.2、配置
进⼊解压后的⽂件夹配置,这⾥需要注意的是,使⽤参数排除了pcre和zlib,同时指定了openssl的安装⽬录,并指定安装ssl模块
./configure --without-http_rewrite_module --without-http_gzip_module  --with-http_ssl_module --with-openssl=/home/tuzongxun/openssl/openssl-1.0.0a 2.3.3、编译
make
2.3.4、安装
make install
安装后会看到/usr/local⽬录中多了⼀个nginx⽬录,即nginx的安装⽬录
3、证书⽣成
3.1、⽣成根证书
mkdir ssl 创建证书存放的⽬录
internet网络编程
cd ssl 进⼊证书存放⽬录
openssl genrsa -out ca.key 2048 ⽣成根证书私钥
制作根证书
openssl req -new -x509 -days 3650 -key ca.key -
3.2、⽣成服务端证书
先⽣成服务端私钥
openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key
⽣成签发请求,注意这⾥的common name必须是需要访问的域名,其他的内容可以和根证书填写的⼀样
根据签发请求和服务端私钥⽣成服务端证书
openssl x509 -req -sha256 -in server.csr - -CAkey ca.key -CAcreateserial -days 3650 -
4、单向认证
学会tcpip协议能做什么CA单向认证,只需要验证服务端是否可信即可,因此也就只需要上边的步骤⽣成了根证书和服务端证书即可,然后就可以配置nginx了。
4.1、nginx配置
进⼊nginx的安装⽬录到f⽂件更改配置
主要是更改server⾥的内容,更改后如下:
主要更改如下:
默认的 listen 80为 listen 443 ssl;
server_name指向之前⽣成服务端证书时指向的域名;
使⽤ ssl on开启ssl安全认证功能;
ssl_certificate指定服务端证书的地址,如/usr/local/nginx/;
ssl_certificate_key指定服务端私钥地址,如/usr/local/nginx/ssl/server.key;
ssl_session_timeout设置ssl session超时时间5m;
更改默认的跟访问路径/的路由为实际需要访问的资源,例如这⾥指向了tomcat默认端⼝(启动了tomcat才能访问,或者其他具有8080端⼝的可访问资源)。
原本根⽬录配置如下,现在注释掉:
# location / {
#    root  html;
#    index  index.html index.htm;
# }
修改之后配置如下:
location / {
proxy_pass  172.23.130.205:8080/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
}
4.2、启动nginx
在nginx的sbin⽬录中启动nginx
java下载过程4.3、修改客户端hosts⽂件,进⾏域名映射
172.23.130.
这⾥为虚拟域名,前边的ip是nginx所在linux虚拟机的ip,意思是在这个windows机器中访问时,实际要访问172.23.130.205机器。
4.4、客户端安装根证书
5、双向认证
单向认证是客户端根据ca根证书验证服务端提供的服务端证书和私钥;双向认证还要服务端根据ca根证书验证客户端证书和私钥,因此双向认证之前还需要⽣成客户端证书和私钥。
5.1、⽣成客户端证书
客户端证书⽣成步骤和服务端基本⼀样,需要注意的就是在⽣成签发请求的时候填写的信息中,comm name也要是访问的域名,其他信息最好是和服务端的不⼀样。
客户端证书⽐服务端稍微多⼀步的就是,需要对客户端证书和私钥进⾏打包处理,这⾥⽅便安装以后后续访问时候携带,⼀般都是使⽤pkcs12进⾏打包:
openssl pkcs12 -export -clcerts - -inkey client.key -out client.p12
打包时需要输⼊证书密码
5.2、nginx配置
双向认证,需要在nginx中开启服务端对客户端的认证,需要在server⾥加⼊如下的配置:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。