Linux CA 证书配置文件介绍

2019-06-07 0 By admin

使用Linux 系统搭建CA证书服务器,需要配置/etc/pki/tls/openssl.conf配置文件。

一、CA证书服务签发证书基本配置

openssl 的 ca 指令实现了证书签发的功能,其相关选项的默认值就来自于这里的设置。
这个字段只是通过唯一的default_ca变量来指定默认的CA主配置字段的入口(-name 命令行选项的默认值)

[ ca ]
default_ca = CA_default
了解的配置项
[ CA_default ]
dir             = /etc/pki/CA           # Where everything is kept
certs           = $dir/certs            # 已生成的证书的默认保存目录
crl_dir         = $dir/crl              #  生成的证书撤销列表(CRL)的默认保存目录
database        = $dir/index.txt        # 保存已签发证书的文本数据库文件,初始时为空。
new_certs_dir   = $dir/newcerts         # 存放新签发证书的默认目录,证书名就是该证书的系列号,后缀是.pem
certificate     = $dir/cacert.pem       # CA证书
serial          = $dir/serial           # 签发证书时使用的序列号文本文件,里面必须包含下一个可用的16进制数字。
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
unique_subject = yes                    # 同一个subject是否只能创建一个证书,设为no表示可以创建多个

# 是否将证书请求中的扩展项信息加入到证书扩展项中去。取值范围以及解释:
# none: 忽略所有证书请求中的扩展项
# copy: 将证书扩展项中没有的项目复制到证书中
# copyall: 将所有证书请求中的扩展项都复制过去,并且覆盖证书扩展项中原来已经存在的值。
copy_extensions = copy

# 定义用于证书请求DN域匹配策略的字段,用于决定CA要求和处理证书请求提供的DN域的各个参数值的规则。
policy  = policy_match

# 定义X.509证书扩展项的字段。如果没有提供这个字段则生成X.509v1而不是v3格式的证书。
x509_extensions = usr_cert

#签名默认使用的信息摘要算法,可以使用:md5,sha1,mdc2,md2,sha256。sha1,md5等签发证书摘要算法已经不被多数浏览器信任。
default_md  = sha256   # use public key default MD 

上面的配置项用来设置CA的工作目录、证书和私钥的存放位置、已经签发的证书等信息。一般可以默认不修改。

二、CA服务器签发证书对请求信息的策略

##### 证书请求信息的匹配策略 #####
# 变量名称是DN域对象的名称,变量值可以是:
# match: 该变量在证书请求中的值必须与CA证书相应的变量值完全相同,否则拒签。
# supplied: 该变量在证书请求中必须提供(值可以不同),否则拒签。
# optional: 该变量在证书请求中可以存在也可以不存在(相当于没有要求)。
# 除非preserve=yes或者在ca命令中使用了-preserveDN,否则在签发证书时将删除匹配策略中未提及的对象。
[ policy_match ]
countryName  = match
stateOrProvinceName = match
organizationName = match
commonName  = supplied
organizationalUnitName = optional
emailAddress  = optional

三、由私钥生成证书请求文件的配置

在申请证书之前通常需要首先生成符合 PKCS#10 标准的证书请求封装格式。
openssl 的 req 指令实现了产生证书请求的功能,其相关选项的默认值就来自于这里的设置。
证书请求的配置分成几个字段,包括一个基本字段和几个附属字段。

[ req ]
# 1、生成的证书中RSA密钥对的默认长度,取值是2的整数次方。建议使用4096以上。
default_bits = 1024
# 2、保存生成的私钥文件的默认文件名
default_keyfile = privkey.pem
# 3、生成的私钥文件是否采用口令加密保护,可以设为yes或no。
encrypt_key = yes
# 4、读取输入私钥文件时的口令,如果未设置那么将会提示输入。
# input_password = secret
# 5、保存输出私钥文件时的口令,如果未设置那么将会提示输入。
# output_password = secret
# 6、签名默认使用的信息摘要算法,可以使用:md5,sha1,mdc2,md2;推荐使用sha256
default_md = sha256
# 7、如果设为yes,那么不管是命令行还是配置文件中的字符串都将按照UTF-8编码看待。默认值no表示仅使用ASCII编码。
utf8 = no
# 8、如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
prompt = yes
# 9、定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
distinguished_name = req_distinguished_name
# 10、The extensions to add to a certificate request 
#证书请求扩展的字段名,该扩展字段定义了要加入到证书请求中的一系列扩展项。
req_extensions = v3_req 
# 11、The extentions to add to the self signed cert
# 生成自签名证书时要使用的证书扩展项字段名,该扩展字段定义了要加入到证书中的一系列扩展项。
x509_extensions = v3_ca

四、证书请求文件:特征名称”字段包含了用户的标识信息;设置默认值

[ req_distinguished_name ]
countryName_default             = CN    #国家
stateOrProvinceName_default     = Shandong  #升
localityName_default    = Qingdao #城市
0.organizationName_default      = Yxb #公司名
organizationalUnitName_default  = Tech  #部门

五、证书请求文件:加入到证书请求的中一系列扩展项

[ v3_req ]
basicConstraints = critical, CA:true, pathlen:2   #基本约束:证书用作为CA证书
keyUsage = critical, cRLSign, keyCertSign, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectKeyIdentifier = hash    #主题密钥标识符
authorityKeyIdentifier = keyid:always,issuer  #授权密钥标识符
subjectAltName = @alt_names  #X509V3主题备选名称

六、证书请求文件:主题扩展名称

IP:IP地址信息
DNS: 域名信息

[alt_names]
IP.1 = 10.0.0.1
IP.2 = 192.168.50.54
IP.3 = 192.168.50.55
IP.4 = 192.168.50.56
IP.5 = 192.168.50.57
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local