搭建私有CA
前言
什么是CA
CA是Certificate Authority的缩写,也叫“证书授权中心”。
在web访问中为了保证web内容在网络中的安全传输,就需要用到SSL证书。而想要获得SSL证书就需要得到公认证书签发机构的签发,这些签发机构统称CA。CA主要负责签发证书、认证证书、管理已颁发证书的第三方机构,是PKI的核心。它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。
一般来说,CA必须是所有行业和所有公众都信任的、认可的。因此它必须具有足够的权威性。
什么是CA证书
CA证书,顾名思义,就是CA颁发的证书
CA证书也是数字证书的一种,是通过数字签名实现的数字化证书, 具有不能被伪造的特点。是实现web安全通信中必不可少的一环。
如果用户想得到一份属于自己的证书,他应先向 CA 提出申请。在 CA 判明申请者的身份后,便为他分配一个公钥,并且 CA 将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。
获取CA证书两种方法
- 证书授权机构的颁发
生成签名请求(csr)
将csr发送给CA
从CA处接收签名 - 自签名的证书颁发
自已签发自己的公钥
现在在互联网上大行其道的https协议,就是通过CA证书的认证实现的。但证书虽好却价格昂贵,CA证书的使用者每年都需要向证书颁发机构缴纳一笔不菲的费用,如果搭建的网站只是供自己或局域网内使用,通过证书机构颁发证书就很不划算了。像这种情况,我们就可以通过搭建自己的私有CA来解决,实现局域网内web安全通信。
接下来我会详细介绍如何搭建私有CA,并实现证书的签发和管理。
openssl.cnf文件
想要搭建私有CA,/etc/pki/tls/目录下的openssl.cnf文件是你必须要了解的,文件内有关于CA的重要配置信息。
root&localhost: ~># cat /etc/pki/tls/openssl.cnf
……此处省略部分显示内容……
####################################################################
[ ca ]
default_ca = CA_default #指定默认使用的CA
####################################################################
[ CA_default ]
dir = /etc/pki/CA #CA的工作目录,所有与CA相关的信息都在此目录下
certs = $dir/certs #证书的存放路径,需人为指定才会将证书存放在此目录下。
crl_dir = $dir/crl #证书吊销列表的存放路径
database = $dir/index.txt #指定证书数据库文件所在的路径,index.txt文件用于存放证书数据,此文件默认没有,需手工创建。
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts #新证书的存放目录,新生成的证书默认存放于此目录下。
certificate = $dir/cacert.pem #CA自身证书的所在路径
serial = $dir/serial #要颁发的下一个证书的编号,编号要求是16进制数,该文件需手工创建并写入编号。
crlnumber = $dir/crlnumber #下一个要被吊销的证书编号
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem#CA私钥存放的路径
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert # The extentions to add to the cert
# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_ext
default_days = 365 #指定证书有效期,默认365天。
default_crl_days= 30 # how long before next CRL
default_md = sha256 # use SHA-256 by default
preserve = no # keep passed DN ordering
# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match #指定默认使用的CA策略
# For the CA policy
[ policy_match ] #记录了CA搭建时和客户端向你申请证书时,提交信息的匹配策略。
countryName = match #省或州的名字
stateOrProvinceName = match #城市名
organizationName = match #公司或组织名
organizationalUnitName = optional #公司或组织下的单位名
commonName = supplied #通用名,一般指定为网站的服务器域名,www.xxxx.com
emailAddress = optional #邮件地址
#match、optional、supplied分别代表三种不同的匹配策略,匹配、支持和可选。匹配指要求申