CA分为公共信任CA和私有CA,若想使用公共信任的CA需要很多的money,如果想要在有限范围内使用CA认证方式,可以自己创建一个。下面了解一下CA及其创建方法:

      CA的配置文件为 /etc/pki/tls/openssl.cnf,奥秘都在里边了。

 [ ca ]             #定义了默认的ca
default_ca      = CA_default            # 此处并为定义ca的详细信息,而是指向CA_default。
                                                     
####################################################################
[ CA_default ]
dir             = /etc/pki/CA           # Where everything is kept  指明CA的工作目录
certs           = $dir/certs            # Where the issued certs are kept 签发的证书保存目录  注:$即为/etc/pki/CA
crl_dir         = $dir/crl              # Where the issued crl are kept 吊销列表存保存目录
database        = $dir/index.txt        # database index file. 颁发证书的索引文件
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several ctificates with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.
certificate     = $dir/cacert.pem       # The CA certificate   CA自签证书 注:创建CA自签证书时名称指定cacert.pem
serial          = $dir/serial           # The current serial number   当前证书序列号
crlnumber       = $dir/crlnumber        # the current crl number  当前吊销证书序列号
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL   吊销证书名称为/etc/pki/CA/crl.pem
private_key     = $dir/private/cakey.pem  # The private key  私有密钥 cakey.pem
RANDFILE        = $dir/private/.rand    # private random number file
x509_extensions = usr_cert
 
default_days    = 365                   # how long to certify for   默认证书有效期限
default_crl_days= 30                    # how long before next CRL   默认吊销证书有效期限
default_md      = sha256                # use SHA-256 by default  默认消息摘要算法
preserve        = no                    # keep passed DN ordering

创建私有CA的步骤:

       说明:在配置为CA服务器上生成一个自签证书,并为为CA提供所需要的目录及文件,目录包括:certs, crl, newcerts;文件包括:serial,index.txt。即将以上目录或文件 在/etc/pki/CA/手动创建。

1.  生成私钥,默认放置在/etc/pki/CA/private下

[root@centos7-01 private]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4069)

命令解析:

  • umask 077:私钥不能让除本人之外的其他人所能查看,所以要给予600权限。括号中的umask仅在子shell中起作用,并不影响当前shell;

  • -out:将生成的私钥存输出至文件中,此处要注意,/etc/pki/CA/private/cakey.pem 私钥文件名要与在CA的配置文件中默认的私钥文件名一致 private_key     = $dir/private/cakey.pem

  • 4096:指明私密长度 

查看私钥文件:

[root@centos7-01 private]# ll cakey.pem
-rw-------. 1 root root 3215 Jan 7 17:53 cakey.pem


2.  生成自签证书:将自签证书放在/etc/pki/CA/中

[root@centos7-01 private]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655

注意:此过程中使用的是私钥,这应该是不允许的,应该用公钥自签才对啊? 在此过程中会自动从私钥中抽取出公钥,并放到该目录下,此处自签的仍然是公钥。

命令解析:

  • req:证书请求及证书生成工具

  • -new:生成新证书签署请求

  • -x509:生成自签格式证书,专用于创建私有CA;若不自签则不用此参数

  • -key:生成请求时用到的私有秘钥文件路径

  • -out:生成的请求文件路径;如果是自签操作,则直接生成签署过的证书;

  • -days:证书的有效期限,单位是day;

You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Country Name (2 letter code) [XX]:CN                #国家代码两位 
State or Province Name (full name) []:Beijing       #省会名称 
Locality Name (eg, city) [Default City]:Bgeijing     #城市名称 
Organization Name (eg, company) [Default Company Ltd]:Ceshi      #组织名称  
Organizational Unit Name (eg, section) []:Ceshi    #部门名称 
Common Name (eg, your name or your server's hostname) []:centos7-01  证书持有者名字,或服务器主机名 
Email Address []:           #管理员邮箱地址,此处可为空。


命令解析:

  • req:证书请求及证书生成工具

  • -new:生成新证书签署请求

  • -x509:生成自签格式证书,专用于创建私有CA;若不自签则不用此参数

  • -key:生成请求时用到的私有秘钥文件路径

  • -out:生成的请求文件路径;如果是自签操作,则直接生成签署过的证书

  • -days:证书的有效期限,单位是day

查看生成的自签证书:

cat /etc/pki/CA/cacert.pem     则会出现很长的一段密码字符串,在这里就不展示其内容了。


3.  为CA提供所需要的目录及文件,给定一个序列号:

[root@centos7-01 CA]# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}
[root@centos7-01 CA]# touch /etc/pki/CA/{serial,index.txt}
[root@centos7-01 CA]# echo 01> /etc/pki/CA/serial
[root@centos7-01 CA]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365

至此私有CA创建完毕。那如何让其他服务器到此私有CA签证呢?需要用到证书进行安全通信的服务器想CA请求签署证书。

客户端到CA签署证书步骤:(此处以httpd服务为例进行创建,下面我将更换一个主机(centos6-01)做证书签署操作。)

        思路分析:需要在服务的目录下创建一个ssl目录,并在这个ssl目录下创建一个私钥和签证请求。将请求发给CA,让CA签署书。

1.  在用到证书的主机上生成私钥:

[root@CentOS6-01 httpd]# mkdir /etc/httpd/ssl     # 在/etc/httpd/目录下创建ssl目录
[root@CentOS6-01 httpd]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

       #在/etc/httpd/ssl目录下创建一个名为httpd.key私钥

2.  生成证书签署请求

[root@CentOS6-01 ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key  -out /etc/httpd/ssl/httpd.csr -days 365     (生成的证书请求不是自签的,需要CA签的,所以不用-x509)

#在/etc/httpd/ssl/目录中创建一个有效期限为365天、名为httpd.csr 签证请求文件。此处与CA创建时生成签署请求一样,从私钥中抽取公钥,并生成签署请求文件。因为是私有CA,此处的证书服务器的公司名与证书颁发者要在一个单位,否则可能会通过不了。

You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:CN   State or Province Name (full name) []:Beijing Locality Name (eg, city) [Default City]:Beijing Organization Name (eg, company) [Default Company Ltd]:Ceshi Organizational Unit Name (eg, section) []:Ceshi Common Name (eg, your name or your server's hostname) []:www.ceshi.com 
#注意:使用作为web服务被外部 使用时候, 是web服务必须是www开头,否则证书验证不能通过,所以此处的主机名#为www.ceshi.com                     
Email Address []:webmaster@ceshi.com
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:   #证书签署请求时候想要不让他人知道,可以设置密码,本操作是测试所以忽略了。 
An optional company name []:


3.  将此请求通过可靠的方式发给CA主机:一般情况下是CA住址用移动设备考走,本次是使用远程复制命令将请求文件复制到CA主机上进行签证。

[root@CentOS6-01 ssl]# scp httpd.csr root@172.16.44.11:/tmp/


     到172.16.44.11主机上的/tmp中可看到签证请求文件。

4.  在CA主机上签署证书;在CA主机上执行

[root@centos7-01 CA]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365


签证成功, httpd.crs文件就可以删除了。data base update此处是更新/etc/pki/CA/中的index.txt数据,查看证书中的信息:

[root@centos7-01 CA]# cat /etc/pki/CA/index.txt 
V    170106120853Z        01    unknown    /C=CN/ST=Beijing/O=Ceshi/OU=Ceshi/CN=www.ceshi.com/emailAddress=webmaster@ceshi.com
#第一个签的证书序列号为01      unknown后边的内容为主题标识
#V 标识已签过。
[root@centos7-01 CA]# openssl x509 -in /etc/pki/CA/certs/httpd.crt  -noout -serial -subject 
serial=01   #证书签署序列号 
subject= /C=CN/ST=Beijing/O=Ceshi/OU=Ceshi/CN=www.ceshi.com/emailAddress=webmaster@ceshi.com


5.  将签好的文件发送到申请签发主机上:

[root@centos7-01 CA]# scp certs/httpd.crt root@172.16.44.10:/etc/httpd/ssl/

为保证信息不泄露,可将请求签署主机和CA主机上的httpd.csr文件删除。

 


SERIAL换成证书真正的序列号

3、 生成吊销证书的吊销编号(第一次吊销证书时执行)

[root@centos7-01 newcerts]#echo 01 > /etc/pki/CA/crlnumber 吊销序列号

4、 更新证书吊销列表

[root@centos7-01 newcerts]#openssl ca -gencrl -out thisca.crl

查看crl文件:

[root@centos7-01 newcerts]#openssl crl –in /PATH/FROM/CRL_FILE.crl -noout –text