CA认证完整实现步骤

(本文参考https://blog.csdn.net/tuzongxun/article/details/88647172)

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需要证书。

5、单向认证
网络通讯是双向的,但是安全认证不一定都是双向。大多数情况下可能都是单向的,只需要客户端确认服务端是可靠的,而服务端不管客户端是否可靠。即客户端,比如浏览器会验证服务端证书,服务端不需要客户端证书。

6、双向认证
双向认证相对於单向认证,即客户端需要确认服务端是否可信,服务端也需要确认客户端是否可信。双方都要验证对方的证书。

二、实现步骤
1、本地环境
本次技术调研过程全程都在自己的电脑上,采用物理机加虚拟机的方式:
物理机:win10+ie+Chrome
虚拟机:centeros6.8+nginx+tomcat+openssl

2、nginx安装
2.1、安装包准备
nginx安装需要依赖其他的一些组件,网上说有以下三个必要依赖:

openssl
pcre
zlib

但实际安装过程发现只有openssl是必要的,其他两个可以排除,因此实际安装时下载了两个安装包:

nginx-1.12.2.tar.gz
openssl-1.0.0a.tar.gz

2.2、安装openssl
2.2.1、解压

tar -zxvf openssl-1.0.0a.tar.gz

2.2.2、配置
进入解压后目录

./configure

2.2.3、编译

make

2.2.4、安装

make install

2.3、安装nginx
2.3.1、解压

tar -zxvf nginx-1.12.2.tar.gz

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 创建证书存放的目录
cd ssl 进入证书存放目录
openssl genrsa -out ca.key 2048 生成根证书私钥

å¨è¿éæå¥å¾çæè¿°

制作根证书

openssl req -new -x509 -days 3650 -key ca.key -out ca.crt

3.2、生成服务端证书

先生成服务端私钥

openssl genrsa -out server.pem 1024
openssl rsa -in server.pem -out server.key

生成签发请求,注意这里的common name必须需要访问的域名(也可以是IP),其他的内容可以和根证书填写的一样

openssl req -new -key server.pem -out server.csr

openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt

4、单向认证

CA单向认证,只需要验证服务端是否可信即可,因此也就只需要上边的步骤生成了根证书和服务端证书即可,然后就可以配置nginx了。

4.1、nginx配置

进入nginx的安装目录找到nginx.conf文件更改配置
在这里插入图片描述
主要是更改server里的内容,更改后如下:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen   443 default_server;        
	server_name _ ;
	ssl on;
	ssl_certificate /usr/local/nginx/ssl/server.crt;
	ssl_certificate_key /usr/local/nginx/ssl/server.key;
	ssl_session_timeout 5m;
	#ssl_client_certificate /usr/local/nginx/ssl/ca.crt;
	#ssl_verify_client on;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        proxy_pass   http://192.168.4.20:8082/;
        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;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

主要更改如下:
默认的 listen 80为 listen 443 default_server;
server_name _;
使用 ssl on开启ssl安全认证功能;
ssl_certificate指定服务端证书的地址,如/usr/local/nginx/ssl/server.crt;
ssl_certificate_key指定服务端私钥地址,如/usr/local/nginx/ssl/server.key;
ssl_session_timeout设置ssl session超时时间5m;

更改默认的跟访问路径/的路由为实际需要访问的资源,例如这里指向了tomcat默认端口(启动了tomcat才能访问,或者其他具有8080端口的可访问资源)。

4.2、启动nginx

在nginx的sbin目录中启动nginx

4.4、客户端安装根证书

上边启动nginx,并配置hosts之后,ie浏览器中就可以访问https://192.168.4.20了,但是会提示不安全的站点,点击之后才能继续访问:

 5、双向认证(自测只能IE内核浏览器访问)

单向认证是客户端根据ca根证书验证服务端提供的服务端证书和私钥;双向认证还要服务端根据ca根证书验证客户端证书和私钥,因此双向认证之前还需要生成客户端证书和私钥。

5.1、生成客户端证书

客户端证书生成步骤和服务端基本一样,填写的信息中,comm name也要是访问的域名,其他信息最好是和服务端的不一样。

双向认证命令:
openssl genrsa -out client.pem 1024
openssl rsa -in client.pem -out client.key
openssl req -new -key client.pem -out client.csr
填写信息
openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

 下面是将nginx中配置文件的这两个打开。

 修改后重启nginx

访问地址,报错:

将打包生成的client.p12文件拷贝至客户端,双击安装证书.

关闭浏览器=>再次访问=>提示确认证书=>点击确定即可.

双向认证完成。再次提醒,双向认证只能适用于IE内核,其他浏览器解决方案暂时未研究。

发布了57 篇原创文章 · 获赞 35 · 访问量 10万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章