创建私有CA并进行证书申请

Posted JohnnyFang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了创建私有CA并进行证书申请相关的知识,希望对你有一定的参考价值。

    在上周《描述秘钥交换的过程》结尾,笔者有提到为保证密钥交换和数据传输的安全可靠性,会采用CA证书的形式,此篇主要讲一下私有CA的相关的东西。

    CA​(Certificate Authority)​是颁发数字签证的机构,它负责发放和管理数字证书,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。但是公共CA所发放的CA证书基本是收费的,而且价格比较贵,同时考虑到很多企业内部是不使用外网的,因此要建立自己的私有CA。

    私有CA的实现可以通过OpenCA和openssl两种途径,其中OpenCA是OpenCA开源组织使用Perl对OpenSSL进行二次开发而成的一套完善的PKI免费软件,但是需要自己去下载安装,笔者这边就使用CentOS自带的openssl来操作。

  1. 创建私有CA

    很多服务在涉及到加密时都要使用证书,此时我们以一个服务器来搭建CA,并发放证书给需要的服务。

1.1 关键配置文件

    CA证书的关键配置文件为/etc/pki/tls/openssl.cnf,我们主要是查看这个配置文件中关于文件和目录的说明,以及证书的匹配策略部分。

1.1.1 文件及目录说明

创建私有CA并进行证书申请_centos

   上图为配置文件中关于文件和目录的相关说明,其中:

    ①/etc/pki/CA约定了颁发CA证书的路径和总目录,CentOS8默认是没有CA目录,需自己创建;

    ②/etc/pki/CA/certs用于存放证书;

    ③/etc/pki/CA/crl为证书吊销列表;

    ④/etc/pki/CA/index.txt是用于存放颁发给所有用户的证书索引数据库;

    ⑤/etc/pki/CA/newcerts是存放新证书的文件夹;

    ⑥/etc/pki/CA/cacert.pem为CA自签名证书;

    ⑦/etc/pki/CA/serial是序列号,即每个证书的编号,需填写一个初始数字,如01,后续颁发的证书编号将在此基础上自动增加;

    ⑧/etc/pki/CA/crlnumber记录证书吊销列表编号;

    ⑨/etc/pki/CA/crl.pem为证书吊销列表文件;

    ⑩/etc/pki/CA/private/cakey.pem为CA私钥。

1.1.2 匹配策略

    配置文件中也规定了匹配策略,如果使用policy_match策略,则国家、省/直辖市、公司/组织名称是必须统一的,如果使用policy_match策略,填写信息可不相同​(如下图)​。

创建私有CA并进行证书申请_配置文件_02


1.2 创建CA所需文件

1.2.1 创建/etc/pki/CA目录

    笔者这边是拿CentOS8来创建CA服务器的,由于CentOS8上是没有/etc/pki/CA目录,我们需先创建,同时可以参考CentOS7上自带的目录来创建一些子目录​(如下图)​。

创建私有CA并进行证书申请_centos_03

创建私有CA并进行证书申请_配置文件_04

创建私有CA并进行证书申请_centos_05


1.2.2 生成index.txt和serial文件

    使用touch命令在/etc/pki/CA下创建index.txt和serial文件;执行 ​echo 01 > /etc/pki/CA/serial​ 命令指定颁发的第一个证书的编号​(如下图)​。

创建私有CA并进行证书申请_centos_06


1.2.3 生成CA私钥

    进入到/etc/pki/CA目录下,执行 ​openssl genrsa -out private/cakey.pem 2048​ 命令即可生成私钥​(如下图)​。

创建私有CA并进行证书申请_签名证书_07

    注意:如果是在CentOS7上操作,直接执行上述命令所生成的文件是不安全的​(如下图)​。

创建私有CA并进行证书申请_centos_08

创建私有CA并进行证书申请_centos_09

    CentOS7系列执行 ​umask 066; openssl genrsa -out private/cakey.pem 2048​ 命令,即可使生成的私钥文件属性变成其他用户不可读​(如下图)​。

创建私有CA并进行证书申请_配置文件_10


1.2.4 生成CA自签名证书

    执行 ​openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3650 -out  /etc/pki/CA/cacert.pem​ 命令生成自签名证书,在填写CA证书信息时,需要注意配置文件中关于匹配策略的要求,如果不修改配置文件,默认的是执行policy_match策略​(如下图)​。

创建私有CA并进行证书申请_签名证书_11

    命令中,“-new”表示生成新证书签署请求,“-x509”专用于CA生成自签证书,“-key”表示生成请求时用到的私钥文件,“-days”指明证书的有效期,“-out”指明证书的存放路径。

    直接查看cacert.pem显示出的内容是基于base64转码过的,执行 ​openssl x509 -in cacert.pem -noout -text​ 命令可转为文本格式查看,整数中包含了序号、签名算法、颁发者、颁发给​(即所需CA的对象)​和有效期等信息​(如下图)​。

创建私有CA并进行证书申请_配置文件_12

创建私有CA并进行证书申请_配置文件_13

    到此,私有CA就正式搭建好了。执行 ​sz cacert.pem​ 命令可将证书保存到到电脑桌面查看,查看时需将证书文件后缀改为crt查看​(如下图)​。

创建私有CA并进行证书申请_配置文件_14

1.3 基于单个服务颁发CA证书

    以上考虑的是多种服务需要使用证书的情况,如果仅有单个服务需要CA证书,是没必要单独搭建CA服务器的,比如刚好有个服务叫test,且只有这一个test服务CA证书,执行 ​openssl req -utf8 -newkey rsa:1024 -subj "/CN=test" -days 3650 -keyout test.key -nodes -x509 -out test.crt​ 命令,即可生成一个关于test的自签名证书和私钥文件​(如下图)​。

创建私有CA并进行证书申请_centos_15

    如果是在CentOS7上操作,生成单个服务的CA更简单。CentOS7进入到/etc/pki/tls/certs目录下,可以发现有一个Makefile文件,执行make命令会显示调用Makefile文件,并可使用make命令直接生成CA证书​(如下图)​。

创建私有CA并进行证书申请_配置文件_16

    假设CentOS7上仅有一个服务叫test2需要证书,执行 ​make /data/test2.crt ​命令,即可生成一个自签名证书和私钥文件保存到/data目录下​(如下图)​。

创建私有CA并进行证书申请_配置文件_17


  1. 证书申请

    私有CA搭建完毕,即可针对服务申请证书。证书申请分三步:生成证书私钥、基于证书私钥进行证书申请和发放证书。

2.1 生成证书私钥

    假设现在有一个叫haha的服务需要申请CA证书,并且将haha的信息放在/data目录下。首先需在/data目录下创建一个haha的总目录,进入到/data/haha目录下,执行 ​openssl genrsa -out /data/haha/haha.key 2048​ 命令即可生成证书私钥​(如下图,CentOS7系列执行该命令时需加umask 066;)​。

创建私有CA并进行证书申请_签名证书_18

2.2 生成证书申请文件

    证书申请文件基于证书私钥生成,此时我们相当于使用/data/haha/目录下的haha.key去申请一个新的证书,即执行 ​openssl req -new -key /data/haha/haha.key -out /data/haha/haha.csr​ 命令,生成证书申请文件haha.csr并放在/data/haha目录下​(如下图)​。

创建私有CA并进行证书申请_配置文件_19

    根据配置文件中的相关要求,因为默认走的是policy_match策略,故申请时填写的国家、省/直辖市和组织/公司名是必须统一的,其他部分信息不要求统一,“extra”部分可不写。


2.3 颁发证书

    假设给haha的CA证书有效期为1000天,执行 ​openssl ca -in /data/haha/haha.csr -out /etc/pki/CA/certs/haha.crt -days 1000​ 命令后,可看到CA证书的有效期和颁发给​(即haha)​的申请内容等信息,输入两个y确定后即可完成CA证书的颁发​(如下图)​。

创建私有CA并进行证书申请_配置文件_20

创建私有CA并进行证书申请_centos_21

    此时,我们发现/etc/pki/CA目录下多出了一些文件,如certs中多了haha.crt,newcerts中多了01.pem等,执行 ​cat index.txt​ 命令可查看当前已发放的CA证书信息,执行 ​cat serial​ 命令可查看下一个证书的编号,“openssl ca -status 证书编号”可查看证书是否有效​(如下图)​。

创建私有CA并进行证书申请_签名证书_22

    也可执行 ​sz certs/haha.crt​ 命令将CA证书保存到电脑中查看相关信息​(如下图)​。

创建私有CA并进行证书申请_centos_23

    因为电脑无法对保存到电脑的证书进行识别,无法确认安全性,所以haha的证书路径上没有显示跟CA证书信息,如果想修改,打开根证书→点击“安装证书”→点击“当前用户”→选择“将所有的证书都放入下列存储”中的“收信人的根证书颁发机构”,后续确定,再次打来haha的证书,即可看到根证书信息​(如下图)​。

创建私有CA并进行证书申请_centos_24


2.4 证书的重复申请

    如果一个服务在已申请了证书的情况下,想再次根据自己的证书秘钥进行二次申请,也是可以实现的。上面已经根据haha的证书申请文件生成过haha.cert证书,假设新生成的证书名称为haha-bew.cert,直接执行 ​openssl ca -in /data/haha/haha.csr -out /etc/pki/CA/certs/haha-new.crt -days 1000​ 命令会报错提示已颁发证书,查看/etc/pki/CA/目录,也未生成新的证书​(如下图)​。

创建私有CA并进行证书申请_签名证书_25

    这是因为index.txt.attr文件中默认的subject是要求不同的,将yes改成no,再次执行上述命令,即可再次生成证书​(如下图)​。

创建私有CA并进行证书申请_配置文件_26

创建私有CA并进行证书申请_centos_27

    此时certs目录下多出了haha-new.crt证书,查看index.txt时,因为是根据同一份证书申请文件生成,所以除了编号,其他信息时相同的​(如下图)​。

创建私有CA并进行证书申请_签名证书_28

 ​2.5 跨组织的共有CA的实现

    虽然是私有CA,但是也能实现跨国、省/直辖市和组织的共有CA功能。我们以另一个服务heihei为例,假设现在heihei现在是在美国纽约,是属于根证书信息中test公司的分公司,名字叫test-heihei,生成证书文件的步骤与上述haha相同,具体操作如下:

创建私有CA并进行证书申请_配置文件_29

    此时我们根据heihei的证书申请文件heihei.csr去颁发证书,会提示报错​(如下图)​。

创建私有CA并进行证书申请_配置文件_30

    这一点就涉及到上面所提到的匹配策略,因为默认执行的policy_match策略,需要将国家、省份/直辖市和组织后的match改为optional,为了省事,也可直接将策略改为policy_anything​(如下图)​。

创建私有CA并进行证书申请_配置文件_31

    修改保存策略后,再次执行 ​openssl ca -in /data/heihei/heihei.csr -out /etc/pki/CA/certs/heihei.crt -days 1000​ 命令,即可完成跨组织的CA证书颁发,并可查看证书相关信息​(如下图)​。

创建私有CA并进行证书申请_签名证书_32

创建私有CA并进行证书申请_签名证书_33


  1. 证书吊销及吊销列表

3.1 证书吊销

    出于各种原因,我们可能要对证书进行吊销。例如上面针对haha的同一个证书申请文件,我们颁发了两个证书会有所重复,现在要对haha-new.crt进行吊销,执行 ​openssl ca -revoke /etc/pki/CA/newcerts/02.pem​ 命令即可,我们再查看编号为02的haha-new.crt证书,状态已经变成了revoked不可用了​(如下图)​。

创建私有CA并进行证书申请_配置文件_34


3.2 证书吊销列表

    由于证书吊销了只有根证书知道,其他服务或用户不清楚是否已吊销,为了让其他服务或用户知道某个或某些证书已经吊销,需要生成吊销列表放在一个公共场所。

    我们需要先根据配置文件中的路径要求来生成吊销列表文件,首先创建一个/etc/pki/CA/crlnumber文件,并将初始编号设定为01,即执行 ​echo 01 > /etc/pki/CA/crlnumber​ 命令​(如下图)​。

创建私有CA并进行证书申请_centos_35

    接着执行 ​openssl ca -gencrl -out /etc/pki/CA/crl.pem​ 命令生成证书吊销列表文件​(如下图)​。

创建私有CA并进行证书申请_配置文件_36

创建私有CA并进行证书申请_配置文件_37

    假设heihei在国外的分公司垮了,对heihei的证书也进行吊销,吊销过后,需再次执行 ​openssl ca -gencrl -out /etc/pki/CA/crl.pem ​生成吊销列表​(如下图)​。

创建私有CA并进行证书申请_centos_38

    执行 ​sz crl.pem​ 命令,将吊销列表保存到桌面,文件后缀改为crl,打开后可查看吊销列表信息,如果是企业,也可放于网站或者其他地方便于用户查看​(如下图)​。

创建私有CA并进行证书申请_centos_39

以上是关于创建私有CA并进行证书申请的主要内容,如果未能解决你的问题,请参考以下文章

创建私有CA

私有CA的创建和证书的申请

CA证书申请搭建dhcp服务

创建私有CA及颁发证书

Linux如何创建私有CA和申请证书

私有CA建立和证书申请