CA分为公共信任CA和私有CA,若想使用公共信任的CA需要很多的money,如果想要在有限范围内使用CA认证方式,可以自己创建一个。下面了解一下CA及其创建方法:
CA的配置文件为 /etc/pki/tls/openssl.cnf,奥秘都在里边了。
[ ca ] #定义了默认的cadefault_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/CAcrl_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.pemserial = $dir/serial # The current serial number 当前证书序列号crlnumber = $dir/crlnumber # the current crl number 当前吊销证书序列号 # must be commented out to leave a V1 CRLcrl = $dir/crl.pem # The current CRL 吊销证书名称为/etc/pki/CA/crl.pemprivate_key = $dir/private/cakey.pem # The private key 私有密钥 cakey.pemRANDFILE = $dir/private/.rand # private random number filex509_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.comPlease 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