ca协议怎么用(CA双向认证完整实现步骤分析)

网站编辑01 2022-08-04 19:48:03 阅读:30

  一、基础概念

  注:以下概念除专业名词外,均为个人理解,不具备权威性。

  1、什么是系统安全管理

  置于公网的系统,通常都需要一定的安全管理,据我个人理解,这里的安全管理主要分三个方面:

ca协议怎么用(CA双向认证完整实现步骤分析)

  一是应用内的权限控制,比如具体应用的用户名、密码等;

  二是应用数据传输过程中的安全机制,例如各种报文的加解密方案;

  三是数据传输前的通讯安全机制,保证通讯双方都是可靠可信任的,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、环境

  本次技术调研过程全程都在自己的电脑上,采用物理机加虚拟机的方式:

  物理机:win8+ie

  虚拟机:redhat6.4+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必须是需要访问的域名,其他的内容可以和根证书填写的一样

  根据签发请求和服务端私钥生成服务端证书

  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里的内容,更改后如下:

  主要更改如下:

  默认的 listen 80为 listen 443 ssl;

  server_name指向之前生成服务端证书时指向的域名blog.tzx.com;

  使用 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端口的可访问资源)。

  原本根目录配置如下,现在注释掉:

  # location / {

  # root html;

  # index index.html index.htm;

  # }

  修改之后配置如下:

  location / {

  proxy_pass http://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

  4.3、修改客户端hosts文件,进行域名映射

  由于上边的blog.tzx.com为自己虚拟的一个域名,所以电脑是不认识的,需要在客户端进行映射。

  例如我这里要在自己的windows的ie浏览器中访问https://blog.tzx.com,就需要修改windows的hosts文件,C:\Windows\System32\drivers\etc\hosts,在文件中添加如下一行:

  172.23.130.205 blog.tzx.com

  这里blog.tzx.com为虚拟域名,前边的ip是nginx所在linux虚拟机的ip,意思是在这个windows机器中访问blog.tzx.com时,实际要访问172.23.130.205机器。

  4.4、客户端安装根证书

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

  点击继续访问之后如下:

  成功打开tomcat默认访问页面,但是url栏会提示证书错误,这是因为客户端根本无法判断服务端证书的正确性,没有依据,所以需要在浏览器安装根证书。

  以ie为例,步骤依次是:

  设置——》internet 选项——》内容——》证书

  点击证书之后选择“受信任的根证书颁发机构”——》”导入”——》“下一步”——》“浏览”,然后选择根证书进行安装,这里的根证书即在linux中生成的ca.crt,需要先从linux中下载过来。

  安装完成之后看到我们自己的CA机构信息:

  清楚ie缓存,重新启动ie之后,再访问https://blog.tzx.com会看到可以直接访问了,并且没有了证书错误的提示,单向认证完毕


二维码