欢迎光临
我们一直在努力

CA体系结构介绍与Openssl的使用

目录

1     CA架构说明

1.1      名词说明

1.2      信任关系说明

2     证书在windows服务中的具体使用方式

3     Openssl实现CA体系的操作方法

3.1      使用自签名证书自建CA(在CA端操作)

3.2      在客户端生成证书申请文件(在APP端操作)

3.3      在CA端颁发证书

3.4      具体案例测试

3.4.1       环境介绍

3.4.2       Centos19安装配置nginx

3.4.3       nginx使用自签名启用ssl认证

3.4.4       使用windows01访问测试—预期效果证书不信任

3.4.5       windows01添加对自签名证书的信任

3.4.6       使用windows01访问测试—预期效果证书信任

3.4.7       在centos18上创建CA

3.4.8       使用CA颁发证书并绑定到nginx

3.4.9       使用windows01访问测试—预期效果证书不信任

3.4.10     windows01添加对CA(centos18)的信任

3.4.11     使用windows01访问测试—预期效果证书信任

 

1     CA架构说明

1.1   名词说明

CA:证书颁发机构,类似与工商局,专门发放证书的机构,只有得到了CA颁发的证书应用才能正常对外提供服务

公钥:顾名思义,公共的秘钥,安全性要求不高,可以共享出来给大家使用

私钥:私有的秘钥,只能自己使用,需要防止泄露

公钥和秘钥的关系:公钥和秘钥成对出现,互相认证,即我的公钥加密的文件只能我的秘钥解开,我的秘钥加密的文件只能我的公钥解开,每个个体(可以是用户或者主机)都可以拥有一对。

证书:采用公钥秘钥的特性生成的一种文件,由CA颁发出来的,类似于营业执照

1.2   信任关系说明

如上图,APP可以是Web
server或者其他的应用程序,PC代指浏览APP所提供服务的设备包括电脑手机等设备。PC访问APP时(ssl认证)需要验证APP绑定的证书的真实性,而证书是由CA颁发的,此时PC只要信任CA即可,信任的方式为将CA的自签名证书加入到电脑的“受信任的证书颁发机构”。可以通过windows的控制台或者IE浏览器中的设置查看电脑信任了哪些CA,如下查看方式

打开”internet选项”—“内容”—“证书”—“受信任的根证书颁发机构”可以看到微软已经帮我们信任好了一些公共的CA。

一般找这里面列出来的CA组织申请证书都是需要费用的,所以大家经常会在访问网页时会发现安全证书的警告,这个一般是组织内部CA颁发的或者是自签名证书。自签名证书就是通过将CA与APP所在的服务器合二为一的方式实现的。

#上面的操作是windows系统,如果是RedHat系统可以使用如下方式添加对CA的信任

cat [根证书文件] >> /etc/pki/tls/certs/ca-bundle.crt

2     证书在windows服务中的具体使用方式

由于作者前期是从事Windows运维相关的工作,先简单介绍一下CA在windows AD中的应用。

在AD环境中一般会需要架设一台CA供其他需要证书加密的服务使用,CA架设(集成AD架设的方式)完成之后域中的所有windows设备都会自动信任该CA,域中的所有设备和所有用户都可以向CA申请证书。申请证书的方式有两种,一种是登录CA提供的网页申请,另一种如下:

“开始”—“运行”—“输入mmc回车”—“文件”—“添加删除管理单元”—“证书”如下图

可以使用用户或者主机的名义去申请,这里选择我的用户账户

右键“个人”—“所有任务”—“申请新证书”点击下一步

在这个界面需要在CA端定义了注册策略之后,这里就会显示注册策略,选择相应的注册策略之后申请就会被提交到CA,在CA端进行证书颁发之后在证书这一列就会显示出来证书了

这里就简单的介绍了一下windows
AD环境中的证书申请方法,如果CA是使用第三方工具如openssl等工具搭建的,具体的操作方法也可能会有一些差异

3     Openssl实现CA体系的操作方法

3.1   使用自签名证书自建CA(在CA端操作)

#创建私钥

openssl genrsa -out cakey.pem 4096 

#使用上面的私钥创建证书,这个证书被称为根证书,一台电脑将这个证书导入到“受信任的根证书颁发机构”后就相当于信任的这个CA

openssl req -new -x509 -key cakey.pem -out cacert.pem
-days 3650

3.2   在客户端生成证书申请文件(在APP端操作)

#生成私钥

openssl genrsa -out app.key
4096

#生成证书申请文件,实际上是生成了一个自签名证书,只是后面需要拿给CA签名

openssl req -new -x509 -key app.key  -out
app.csr -days 3650

3.3   在CA端颁发证书

#将上一步生成的私钥拷贝到CA端,执行如下操作

openssl ca -in httpd.csr -out httpd.crt -days 3650

#证书生成完成后可以通过如下命令查看证书

Openssl x509 -in httpd.crt -noout -serial
-subject

3.4   具体案例测试

3.4.1 环境介绍

Centos18CA

Centos19:运行了nginx,并开启ssl模块,向CA申请证书

Windows01:做实验的windows电脑,命名为windows01

3.4.2 Centos19安装配置nginx

使用源码安装太麻烦,直接使用epel的yum源来安装,如下yum源供参考,具体的安装步骤就不多做介绍了

3.4.3 nginx使用自签名证书启用ssl认证

#创建私钥

openssl genrsa -out httpd.key 1024 

#使用上面的私钥创建证书

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

将私钥和证书的路径填入/etc/nginx/nginx.conf中的如下字段,这些字段默认是注释掉的,需要去掉注释

3.4.4 使用windows01访问测试—预期效果证书不信任

访问https://centos19发现证书错误

查看证书详情可以看到是由centos19自己颁发的证书,并且不受信任

3.4.5 windows01添加对自签名证书的信任

添加信任可以直接将3.4.3中生成的证书拷贝到windows01中进行安装,或者直接在网页中查看证书时安装(这种方式在有些情况下可能不适用)。下面介绍一下第二种方式

如图查看证书,安装证书—下一步

选择存储位置为“受信任的根证书颁发机构”

安装完成之后,就添加了对centos19的信任了

3.4.6 使用windows01访问测试—预期效果证书信任

重新访问网页查看发现没有报错了

 

3.4.7 在centos18上创建CA

创建所需的目录和文件,这些文件目录的配置都在/etc/pki/tls/openssl.conf中定义

然后按照3.1中的方法创建CA的私钥和证书如下

#创建私钥

openssl genrsa -out /etc/pki/CA/private/cakey.pem
4096
 

#使用上面的私钥创建证书,这个证书被称为根证书,一台电脑将这个证书导入到“受信任的根证书颁发机构”后就相当于信任的这个CA

openssl req -new -x509 -key
/etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days
3650

3.4.8 使用CA颁发证书并绑定到nginx

#在centos19上生成私钥

openssl genrsa -out httpd.key
4096

#在centos19上生成证书申请文件

openssl req -new -key httpd.key
-out httpd.csr -days 3650

#编辑nginx配置文件/etc/nginx/nginx.conf,将新申请的私钥和证书绑定到nginx

使配置生效

Nginx -s
reload

3.4.9 使用windows01访问测试—预期效果证书不信任

访问https://centos19发现证书不信任

查看证书发现证书是由centos18颁发给centos19的,证明是CA颁发的证书

3.4.10          windows01添加对CA(centos18)的信任

将3.4.7中CA生成的自签名证书文件cakey.pem拷贝到windows01上,但是需要将后缀名修改为crt,将这个证书文件导入到“受信任的根证书颁发机构”

打开这个文件并导入,如下图可以看出该根证书文件的确是由CA(centos18)颁发给自己的。

做完该操作之后就信任了CA了,以后CA颁发的所有证书都不用再单独做信任关系了。

3.4.11          使用windows01访问测试—预期效果证书信任

完成上一步操作之后,再次访问页面已经没有证书警告了

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。