Linux|一个创建自签名证书的小脚本

Posted by 琉璃康康 on March 17, 2022

这个草稿马上就要半年了,再不整理,可能就要长毛了。

写这个脚本是因为在实验室安装云平台和虚拟设备,需要证书,就使用openssl自建CA并签发证书了,命令虽然几行,但是输入参数和经常需要来回签发证书也是一件麻烦的事情。 1

而且在使用的时候经常碰到证书Seria一样的问题,原因是同一个CA签发了多个证书没有考虑Serial冲突的问题。 2

这个脚本就在此情景下应运而生,整合了openssl制作CA和签发证书的过程,并且使用RANDOM变量来设置证书的Serial。

脚本的输入是一个非常标准的配置文件,包括两个部分,一个是CA信息,一个是证书信息。

两部分都是由Common Name和Subject构成,其中Subject遵循openssl需要创建CSR所需要的标准参数格式。

配置文件详情如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
####### Input host FQDNs here and Prefix of Subject
# Subject_Pre_CN include below items:
# C: Country Name (2 letter code)
# ST: State or Province Name (full name) [Some-State]
# L: Locality Name (eg, city)
# O: Organization Name (eg, company) [Internet Widgits Pty Ltd]
# OU: Organizational Unit Name (eg, section)

# CN: Common Name (e.g. server FQDN or YOUR name)


## Root Subject: CN_ROOTCA and Subject_PreCN_ROOT are fixed parameters, values should be updated, CN_ROOTCA is for the CN of Root CA.
CN_ROOTCA: www.hk314.top
Subject_PreCN_ROOT: C=CN/ST=LN/L=DL/O=HK/OU=Root


## Client Certificate Subject: CN_Cert and Subject_PreCN_Cert are fixed parameters, values should be updated, CN_Cert is for the CN of client.
CN_Cert: self.cert.hk314.top
Subject_PreCN_Cert: C=CN/ST=LN/L=DL/O=HK/OU=Self

配置文件准备好之后就可以直接运行脚本制作CA机构并签发证书了,也支持使用已经创好的CA签发证书,帮助如下:

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
[coreuser@HK:ca_self_signed]$ ./cert_self_signed.sh -h
This is used to generate certificate with an existed CA or self-signed certificates based on openssl!
Version: 1.0

Usage:
 cert_self_signed.sh [-h] -c ConfigFile [-ca CACert -key CAKey] 

Options:
 -h        Show the help
 -c        Config File for Certificate Subject
 -ca       An existed CA certificate(with relative path or absolute path)
 -key      The existed CA private key file(with relative path or absolute path)
           Note: -ca and -key must be set in pair.

For Example:
---------------------------------------------------------------------------------
 1. Show Help:
    user@host > cert_self_signed.sh -h
 
 2. Generate a ROOT CA and self-signed certificate:
    user@host > cert_self_signed.sh -c config.cfg

 3. Generate certificate with an existd ROOT CA:
    user@host > cert_self_signed.sh -c config.cfg -ca ca.crt -key ca.key
    OR
    user@host > cert_self_signed.sh -c config.cfg -ca /home/user/ca.crt -key ca.key
 
---------------------------------------------------------------------------------

脚本输出不仅仅有签发的证书,也会打印出相应的verify的命令,打印这个是因为之前做证书verify的时候经常忘记参数,所以就直接写到脚本输入里了。

脚本做了很多的容错,比如配置文件缺失,配置文件格式有问题,使用已经制作好的CA签发证书的时候要确认CA的证书和私钥匹配。

这个脚本不仅仅可以快速制作CA并签发证书,同时脚本内容也不复杂,可以顺便熟悉openssl命令和签发证书的流程。

脚本、使用介绍和证书样例已经同步到Github,欢迎点击阅读原文查看。

PS:这个Repository的README中超链了一篇介绍数字签名的古老博客(已经十几年之久),但是对于理解证书、数字签名等等非常之浅显易懂​。


欢迎关注公众号:七禾页话(qiheyehk),旅行、摄影。。。偶尔分享技术周边