证书签发
- CA服务器搭建。
- 选择一台服务器作为根证书服务器,并进行CA签发证书目录环境准备。
mkdir -p /home/ca_server cd /home/ca_server/ mkdir demoCA cp /etc/pki/tls/openssl.cnf ./ mkdir ./demoCA/newcerts ./demoCA/private ./demoCA/certs chmod 777 ./demoCA/private/ echo 01 > ./demoCA/serial touch ./demoCA/index.txt
- 修改openssl.cnf文件中CA_default选项中的dir目录为CA服务器的目录。
- 将dir设置为“/home/ca_server/demoCA/”。
vi openssl.cnf
- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 将dir设置为“/home/ca_server/demoCA/”。
- 生成CA私钥和根证书,证书有效期建议选择为30年,例如-days 10950。
openssl genrsa -out ca.key 3072 openssl req -new -x509 -days 10950 -sha1 -extensions v3_ca -key ca.key -out ca.crt -subj "/C=CN/ST=shenzhen/L=shenzhen/O=Huawei/OU=Huawei/CN=CA1" -config ./openssl.cnf cp ca.key demoCA/private/cakey.pem cp ca.crt demoCA/cacert.pem
- 确认CA证书,观察是否为CA:TRUE。
openssl x509 -in ca.crt -noout -text
- 选择一台服务器作为根证书服务器,并进行CA签发证书目录环境准备。
- 证书签发。
执行完导出证书请求文件后,会将节点的证书请求文件传输到远端CA服务器对应的签发路径下。前缀为导出证书请求文件的MAC地址。
MAC地址的获取方式为:ifconfig | grep ether | awk 'NR==1' | awk '{print $2}' ,如68:4x:xx:xx:xx:aa,mac_address为该结果删除:后的字符串。
[root@agent3]# ll /home/ca_server/ total 32K -rw------- 1 root root 1.5K Nov 17 09:07 844xxxxxxxbbtarget.csr -rw-r--r-- 1 root root 1.7K Nov 17 10:24 ca.crt -rw------- 1 root root 2.5K Nov 17 10:24 ca.key drwxr-xr-x 5 root root 4.0K Nov 17 15:32 demoCA -rw-r--r-- 1 root root 11K Nov 17 10:23 openssl.cnf
- 手动签发在CA服务器证书签发路径下,执行证书签名的命令如下,分别签发haf_user和daemon的证书:
openssl ca -policy policy_anything -extensions v3_req -out 844xxxxxxxbbtarget.crt -config openssl.cnf -days 10950 -cert ca.crt -keyfile ca.key -infiles 84xxxxxxx2bbtarget.csr
表1 openssl证书签发命令参数 选项
取值
-out
输出的证书文件。
说明:该证书文件名的前缀必须与输出的证书请求文件一致。
-config
配置文件。
-days
证书有效期,单位:天。
-cert
用于签发的根CA证书。
说明:该证书的名字需命名为ca.crt,用于后续导入步骤使用。
-keyfile
CA的私钥证书文件。
-infiles
需要进行处理的证书请求文件。
说明:该证书对应步骤中导出的证书请求文件,命名需保持一致。
- 自动签发
可通过脚本的方式实现证书的自动签发,主要功能和参考实现如下:
- 实时监测证书产生目录下是否有新产生的csr文件。
- 有新的csr就对其进行签发,并在当前目录下产生相同前缀的.crt文件。如service.csr,则对应的crt为service.crt。证书有效期建议选择为30年,例如-days 10950。
#监测目录下是否有新产生的csr文件,并进行签名 cert_path=/home/ca_server/ inotifywait -m -e create "${cert_path}"| while read path action file do if [[ "$file" =~ .*csr$ ]]; then # Does the file end with .csr? echo "Find new csr file " cert_name=$path$file echo ${cert_name} prefix_name="${cert_name%.*}" echo ${prefix_name} cd ${cert_path} openssl ca -batch -policy policy_anything -extensions v3_req -out $prefix_name.crt -days 10950 -config ${cert_path}/openssl.cnf -cert ${cert_path}/ca.crt -keyfile ${cert_path}/ca.key -infiles ${cert_name} rm -rf ${cert_name} fi echo "End" done
- 若启动上述证书自动签发脚本,则导出后,可以直接在证书签发路径下获取到签发后的证书。CA服务器上相应的证书请求文件会自动被删除。
[root@ca_server]# ll /home/ca_server/ total 40K -rw-r--r-- 1 root root 5.6K Nov 17 15:44 8446fe73b2bbtarget.crt -rw-r--r-- 1 root root 1.7K Nov 17 10:24 ca.crt -rw------- 1 root root 2.5K Nov 17 10:24 ca.key drwxr-xr-x 5 root root 4.0K Nov 17 15:44 demoCA -rw-r--r-- 1 root root 11K Nov 17 10:23 openssl.cnf
- 手动签发
父主题: 配置证书