前言 OpenSSL系列的第二集。
创建完根证书之后,便可以继续创建中间证书信息了,这里以MidCA
作为中间证书命名。
为什么要使用中间证书?
通过使用中间证书,可以减少根密钥的暴露风险,因为即使中间密钥被泄露,影响的范围也仅限于由该中间证书签发的证书 。 密钥轮换:中间证书的密钥可以定期更换,而不需要更换根密钥。 这样可以保持根证书的长期稳定性,同时确保整个系统的安全性。
–根证书、中间证书、目标证书,以及签名和验签(基于openssl)
版本说明
专题跳转
创建属于自己的根证书(快捷指令版) 与创建根证书一致,这里记录着需要创建中间证书所需要的快捷指令方式,方便无脑CV,如需了解更多请前往 创建属于自己的中间证书(一步步操作版)
创建中间证书的文件夹及数据库 创建2.sh
文件,并加入如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #!/bin/bash if [ ! -d MidCA/crt ]; then mkdir -p MidCA/crt fi if [ ! -d MidCA/db ]; then mkdir -p MidCA/db touch MidCA/db/index openssl rand -hex 16 > MidCA/db/serial fi if [ ! -d MidCA/key ]; then mkdir -p MidCA/key fi if [ ! -d MidCA/newcerts ]; then mkdir -p MidCA/newcerts fi
之后./2.sh
进行运行配置文件
创建中间证书配置文件touch ./conf/MidCA.cnf
,并添加如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 # # OpenSSL example configuration file. # See doc/man5/config.pod for more info. # # 整个项目的根目录,默认为当下 HOME = . #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = ./MidCA database = $dir/db/index.txt # 数据文件存放点(必要) new_certs_dir = $dir/newcerts # 存放新证书 (必要) private_key = ./KEY/Mid_CA.key # 私钥地址 (必要) serial = $dir/db/serial # 当前序列号(必要) certificate = RootCA/crt/Mid_CA.crt # 根证书签发文件位置 name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options crl_extensions = crl_ext # 添加撤销证书功能 default_days = 365 # 默认天数 default_crl_days= 30 # 默认30天获取撤销证书信息 default_md = sha256 # 公钥默认加密方式 preserve = no # keep passed DN ordering policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 2048 prompt = no distinguished_name = req_distinguished_name string_mask = pkix [ req_distinguished_name ] C = CN ST = TianJin L = TJ O = ZHYCarge OU = ZHYCarge Mid CA CN = ZHYCarge Mid CA emailAddress = ZHYCarge@zhycarge.top [ crl_ext ] authorityKeyIdentifier=keyid:always [ web1_cert ] # www.zhycarge.top config basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth subjectAltName = DNS:www.zhycarge.top authorityInfoAccess=caIssuers;URI:http://ca.zhycarge.top/crt/Mid_CA.crt crlDistributionPoints = URI:http://ca.zhycarge.top/crl/crl-Mid.crl
生成中间证书私钥:
openssl genrsa -aes256 -out KEY/Mid_CA.key 4096
生成中间证书签名请求:
openssl req -new -config ./conf/MidCA.cnf -sha256 -key /KEY/Mid_CA.key -out ./RootCA/csr/Mid_CA.csr
签发证书:
openssl ca -config ./conf/Root_CA.cnf -extensions v3_Web_ca -days 365 -notext -md sha256 -in ./RootCA/csr/Mid_CA.csr -out ./RootCA/crt/Web_CA.crt
至此证书无脑化生成完毕。
创建属于自己的中间证书(一步步操作版) 此处记录详细讲解内容,由于创建证书命令与根证书那里基本相同,因此不过多赘述
创建数据库及相关存储文件夹 创建中间证书的文件夹及数据库
创建中间证书的配置文件 此处内容一步步复制即可,相关讲解已附
创建中间证书配置文件touch ./conf/MidCA.cnf
,并添加如下内容:
CA头 没什么可以讲解的,默认配置
1 2 3 4 5 6 7 8 9 10 11 12 # # OpenSSL example configuration file. # See doc/man5/config.pod for more info. # # 整个项目的根目录,默认为当下 HOME = . #################################################################### [ ca ] default_ca = CA_default # The default ca section ####################################################################
证书配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [ CA_default ] dir = ./MidCA # 与证书配套的配置文件夹 database = $dir/db/index.txt # 证书签发记录数据库 new_certs_dir = $dir/newcerts # 存放生成证书签名信息 private_key = ./KEY/Mid_CA.key # 当前证书私钥地址 serial = $dir/db/serial # 生成随机数,根据随机数进行索引记录 certificate = ./RootCA/crt/Mid_CA.crt # 当前证书签发文件位置 name_opt = ca_default # 默认 cert_opt = ca_default # 默认 crl_extensions = crl_ext # 添加撤销证书功能,与后续功能块联动 default_days = 365 # 默认证书天数 default_crl_days= 30 # 默认更新撤销证书实践 default_md = sha256 # 私钥默认加密方式 preserve = no # 不知道,暂存 policy = policy_match # 证书创建规则匹配,与后续功能块联动
证书规则匹配 1 2 3 4 5 6 7 8 9 # For the CA policy # 前三个match 要求签发证书与当前CA一致,optional为可选项,supplied会在创建时进行输入 [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional
证书生成参数 1 2 3 4 5 [ req ] default_bits = 2048 # 证书加密位数 prompt = no # 不需要显示提示信息,直接按照参数信息进行键入CN信息等 distinguished_name = req_distinguished_name # 参数信息,后面功能块联动 string_mask = pkix # 如果是utf8only,则键入英文可能会出现证书规则匹配错误,具体查看后面疑难杂症章节
证书参数信息 1 2 3 4 5 6 7 8 [ req_distinguished_name ] C = CN # 国家代码,默认2位 ST = TianJin # 所在州省 L = TJ # 所在市 O = ZHYCarge # 组织名称 OU = ZHYCarge Mid CA # 组织唯一名称 CN = ZHYCarge Mid CA # 通用名称,要求唯一 emailAddress = ZHYCarge@zhycarge.top # 邮箱地址
用户证书签发参数 1 2 3 4 5 6 7 8 9 10 [ web1_cert ] # www.zhycarge.top config # 自己做的备忘记录,记得这个参数对应的是哪个证书 basicConstraints = CA:FALSE # 是终端证书,不可再次签发证书 subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment # 证书用途(在根证书讲解里有,查看之前博文) extendedKeyUsage = serverAuth # 证书用途 subjectAltName = DNS:www.zhycarge.top # SAN信息 authorityInfoAccess=caIssuers;URI:http://ca.zhycarge.top/crt/Mid_CA.crt # AIA信息(在根证书讲解里有,查看之前博文) crlDistributionPoints = URI:http://ca.zhycarge.top/crl/crl-Mid.crl # CRL信息(在根证书讲解里有,查看之前博文)
证书吊销列表参数 1 2 [ crl_ext ] authorityKeyIdentifier=keyid:always # 与根证书同
subjectAltName
讲解现已知如果证书不添加这个值,在局域网中IP地址使用Chrome访问时会出现报错:缺少SAN。因此增加此项。
subjectAltName
(SAN),是一项对X.509 的扩展,它允许在安全证书中使用subjectAltName
字段将多种值与证书关联[1] ,这些值被称为主题备用名称。名称可包括:[2]
– subjectAltName wiki
信息标注说明:
可以添加多个,使用,
分开,应该可以使用通配符,如DNS:*.zhycarge.top
IP地址标注:IP:127.0.0.1
电子邮件地址:email:zhycarge@zhycarge.top
域名信息:DNS:www.zhycarge.top
生成中间证书密钥 openssl genrsa -aes256 -out ./KEY/Mid_CA.key 4096
生成CSR文件 openssl req -new -config ./conf/MidCA.cnf -sha256 -key ./KEY/Mid_CA.key -out ./RootCA/csr/Mid_CA.csr
生成中间证书 openssl ca -config ./conf/Root_CA.cnf -extensions v3_Web_ca -days 365 -notext -md sha256 -in ./RootCA/csr/Mid_CA.csr -out ./RootCA/crt/Mid_CA.crt
其中这里使用的配置文件便是根证书的配置文件,在使用根证书配置文件时同时也许访问根证书私钥与根证书文件,因此请确保根证书配置文件中根证书私钥和根证书文件路径有效。
至此中间证书创建结束
其余操作 创建证书链 由于本教程搭建的证书链是通过AIA进行连接,因此在有网条件下签发证书时会自动连接好相关证书信息,但是如果是无网情况下需要签发证书链才能使用证书。(签发证书链过程可能会存在些许问题,暂由于使用AIA进行证书链生成,因此不再研究,若后续自身有需求或有人留言则会继续研究)
命令如下,中间证书在上,根证书在下,生成证书链,生成证书链便可导入到局域网机器中进行安装验证书
cat ./RootCA/crt/Mid_CA.crt ./RootCA/crt/RootCA.crt > ./RootCA/crt/CA_Mid.crt
尾言 暂无