学&用 openssl.conf
在 搭建自己的CA服务 – OpenSSL CA 实战 文章中,我们用到了 openssl.conf 。这个配置文件的内容有可能一些读者比较迷惑,这篇文章进一步解释,期望读者们读完之后,自己也会用openssl.conf文件啦。
openssl.conf 文件格式是一个典型的cfg格式,分段,每段都是KV格式(key=value)。
下面开始每个配置的介绍。
[ ca ] default_ca = CA_default
ca 段定义ca相关配置,当使用 openssl ca 命令时候,会读取这里定义的配置。上面的定义指向另外一个 CA_default 段。ca的配置项,也可以使用 openssl ca -name 参数重新指定。
[ CA_default ] dir = . certs = $dir/certsdb new_certs_dir = $certs database = $dir/index.txt certificate = $dir/ca_cert.pem private_key = $dir/ca_key.pem serial = $dir/serial #crldir = $dir/crl #crlnumber = $dir/crlnumber #crl = $crldir/crl.pem RANDFILE = $dir/private/.rand
dir
CA 的工作根目录
certs/new_certs_dir/serial
CA 每次颁发新证书存放的目录。这个目录下的证书文件名称是 ${serial}.pem 。这个 serial 是CA中的唯一序列号,可以通过 serial 指定初始值,并在 openssl ca 命令中增加 -create_serial 选项。
在我们的例子中,serial 文件的初始值是 01 ,因此,在 certs 目录下,就存在2个证书:
mao@ubuntu:/home/yunweipai/openssl_ca/certsdb$ ls -al total 24 drwxrwxr-x 2 mao mao 4096 Apr 30 00:25 . drwxrwxr-x 3 mao mao 4096 Apr 30 00:25 .. -rw-rw-r-- 1 mao mao 7115 Apr 30 00:16 01.pem -rw-rw-r-- 1 mao mao 5660 Apr 30 00:25 02.pem
database
CA 存放所有证书颁发和吊销纪录的文件,在我们的例子中,文件名为 index.txt ,这个文件内容为:
mao@ubuntu:/home/yunweipai/openssl_ca$ cat index.txt V 160428161558Z 01 unknown /C=CN/ST=GuangDong/ L=ShenZhen/O=UProject/OU=UProject/CN=UProject-CA V 160428162516Z 02 unknown /C=CN/ST=GuangDong/L=ShenZhen/O=UProject/OU=Yunweipai/CN=www.yunweipai.com
VV的意思是有效的(Valid); R 值表示已经吊销(Revoked),当执行 openssl ca -revoke 吊销一个证书时候,会更新此值; E 值表示已经过期(Expired),当执行 openssl ca -updatedb 时候,会将已经过期的证书更新为E 。
160428161558Z证书的到期时间。
01证书的序列号。
unknown证书的文件名,但是这个值好像没有用,都是 unknown 。
/C=CN/ST=GuangDong/L=ShenZhen/O=UProject/OU=Yunweipai/CN=www.yunweipai.com证书的 subject 。
certificate/private_key
CA证书和私钥文件路径。
crldir/crlnumber/crl
吊销证书的路径,序列号
RANDFILE
存放随机数的文件
x509_extensions = usr_cert
CA颁发证书时候,将 user_cert 段的内容加到所颁发证书的 x509_extensions 字段。
default_days = 365 #default_crl_days= 30
证书和CRL的有效天数。
default_md = sha256
消息摘要算法,建议使用sha256。
policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match localityName = supplied organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional
定义使用 subject name 规则,哪些值是可选的,哪些是必选的。
[ req ] default_bits = 4096 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca req_extensions = v3_req [ req_distinguished_name ] C = CN ST = GuangDong L = ShenZhen O = UProject OU = Yunweipai CN = www.yunweipai.com emailAddress = web@yunweipai.com
req 定义 openssl req 生成证书请求的属性,包含 subject name 和 x509_extensions 。
好了,就到这里,通过上面的配置可以搭建一个简单的CA。openssl.conf 里面还有一些配置这里没有描述,有兴趣的同学可以一起探讨。