一、CA的作用

   CA,Catificate Authority,它的作用就是提供证书(即服务器证书,由域名、公司信息、序列号和签名信息组成)加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。任何个体/组织都可以扮演 CA 的角色,只不过难以得到客户端的信任。双方通信,需要通过签证机构CA颁发证书才可以相互信任,安全的进行数据通信,除了收费的认证机构的证书,还可以自签名获取证书。 

二、配置文件及相关参数

   openssl的配置文件:/etc/pki/tls/openssl.cnf ,该文件规定了CA证书主要的存放目录,工作目录,证书编号、策略信息等,搭建CA需要以此 配置文件作为参看。配置文件中需要注意的主要参数:

          [ policy_match ]

                                  countryName                   = match   # 国家名是否匹配,match为匹配

                                  stateOrProvinceName      = match  # 州或省名是否需要匹配

                                  organizationName           = match  # 组织名是否需要匹配

                                  organizationalUnitName  = optional # 组织的部门名字是否需要匹配

                                  commonName                 = supplied # 注释

                                  emailAddress                    = optional # 邮箱地址


    dir                   = /etc/pki/CA           # Where everything is kept (dir变量)

         certs                = $dir/certs       # Where the issued certs are kept(认证证书目录)

         database         = $dir/index.txt    # database index file.(数据库索引文件)

         new_certs_dir  = $dir/newcerts      # default place for new certs.(新证书的默认位置)c

         ertificate         = $dir/cacert.pem    # The CA certificate(CA机构证书)

         serial               = $dir/serial        # The current serial number(当前序号,默认为空,可以指定从01开始)

         private_key     = $dir/private/cakey.pem# The private key(CA机构的私钥)


三种策略:匹配、支持和可选 匹配指要求申请填写的信息跟CA设置信息必须一致,支持指必须填写这 项申请信息,可选指可有可无 

CA自签证书 生成私钥 cd /etc/pki/CA/ (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)

生成自签名证书 openssl req -new -x509 –key 

            /etc/pki/CA/private/cakey.pem -days  7300  -out    

            /etc/pki/CA/cacert.pem

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

              -x509: 专用于CA生成自签证书 (根证书)

              -key: 生成请求时用到的私钥文件

              -days n:证书的有效期限 

              -out /PATH/TO/SOMECERTFILE: 证书的保存路径


三、实验:建立CA,并使用另一个主机申请证书,用CA签名

1、首先选一台主机部署CA中心,touch /etc/pki/CA/index.text 生成证书索引数据库文件

2、echo 00 > serial 指定第一个颁发的序列号

3、创建私钥(umask 066;openssl genrsa -out private/cakey.pem -des3 2048)

genrsa代表RSA算法,CA的私钥存放目录是配置文件中规定的(private目录),2048代表指定私钥位数。

4、生成自签名颁发证书请求:openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300

[root@localhost CA]#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300

Enter pass phrase for private/cakey.pem:

You are about to be asked to enter information that will be incorporated

。。。。。。。。。。。。。。。。。。。。。。。。。。。。

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:HENAN  

Locality Name (eg, city) [Default City]:ZhengZhou  

Organization Name (eg, company) [Default Company Ltd]:shushu.com

Organizational Unit Name (eg, section) []:opt

Common Name (eg, your name or your server's hostname) []:ca.shushu.com

Email Address []:

注意:默认国家,省,公司名称三项必须和CA一致 根CA与子CA的Common Name一定要不一样。

以上就是自制CA证书的主要步骤,创建成功后从虚拟系统sz丢到实体机中安装进行测试。

安装到证书的存储时选择‘将所有的证书都放入下列存储’浏览选中‘受信任的根证书颁发机构’下一步完成。在浏览器设置‘高级选项卡选’

5、查看证书中的信息

openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|issuer|subject|serial|dates

                   text代表全部信息,issuer代表颁发者,subject代表主题,dates代表有效期

openssl ca -status SERIAL 查看指定编号的证书状态 

6、创建搭建子CA,与创建根CA基本相同

  (1)在/etc/pki/CA下创建数据库索引文件

  (2)指定第一个颁发证书的序列号

(3)给web服务器生成私钥

(4)生成证书请求

[root@centos CA]#openssl req -new -key private/cakey.pem -out subca.csr

Enter pass phrase for private/cakey.pem:

140185183258440:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:You must type in 4 to 8191 characters

...........................................................

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:HENAN  

Locality Name (eg, city) [Default City]:LuoHe  

Organization Name (eg, company) [Default Company Ltd]:shushu.com

Organizational Unit Name (eg, section) []:Rou

Common Name (eg, your name or your server's hostname) []:app.shushu.com

Email Address []:


Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:centos

An optional company name []:centos

注意:根据默认策略,所填写的国家,省,公司必须与根CA一致

(5)将子CA中生成的公钥发送给根CA:scp subca.csr [email protected]:/etc/pki/CA

7、颁发证书,在根CA中进行操作,根CA进行签名。

[root@localhost CA]#openssl ca -in subca.csr -out certs/subca.crt -days 3650

Using configuration from /etc/pki/tls/openssl.cnf

...............................

        Subject:

            countryName                   = CN

            stateOrProvinceName      = HENAN

            organizationName            = shushu.com

            organizationalUnitName    = opt

            commonName                 = ca.shu.com

     

Certificate is to be certified until Aug 29 02:56:28 2028 GMT (3650 days)

Sign the certificate? [y/n]:y

.....

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

操作完成后可以查子CA的数据库索引,序列号等信息,子CA是否创建成功

8、最后再把生成的证书文件发送给请求者子CA:scp subca.crt [email protected]:/etc/pki/CA/cacert.pem,发送成功后导出到桌面,打开子CA的证书在‘证书路径’可以查看根子CA的路径信息,这就说明子CA创建成功。