制作自己的SSL证书

先做一个服务端单向认证,最后完成一个服务端客户端双向认证
 
制作一个CA私服,取名叫testca 。
### 准备CA工作目录
【制作自己的SSL证书】```shell
mkdir "$HOME/testca"
cd "$HOME/testca"
mkdir newcerts private conf
chmod g-rwx,o-rwx private
echo "01" > serial
touch index.txt
```
$HOME/testca为待建CA的主目录
newcerts子目录将存放CA签署(颁发)过的数字证书(证书备份目录)
private目录用于存放CA的私钥
conf只是用于存放一些简化参数用的配置文件
serial和index.txt分别用于存放下一个证书的序列号和证书信息数据库
### 生成根证书
#### 配置根证书
创建testca根证书配置文件及内容
```shell
vi "$HOME/testca/conf/gentestca.conf"
```
内容如下
```shell
####################################
[ req ]
default_keyfile = $ENV::HOME/testca/private/cakey.pem
default_md = md5
prompt = no
distinguished_name = ca_distinguished_name
x509_extensions = ca_extensions
 
[ ca_distinguished_name ]
organizationName = dongnaoedu
organizationalUnitName = dongnao
commonName = ca.dongnaoedu.com
emailAddress = 805921455@qq.com
 
[ ca_extensions ]
basicConstraints = CA:true
########################################
```

制作自己的SSL证书

文章插图
 
申请根证书
 
```shell
cd "$HOME/testca"
openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 2190 -config "$HOME/testca/conf/gentestca.conf"
# req 表示发起一个证书签名请求
# -x509 用x509结构替代cert
# -nwekey rsa:2048,新建一个2048 bit的rsa秘钥
# -out 输出的证书文件
# -outform 输出的格式,DER或者PEM
# -days 有效时间2190天
# -config 请求的配置文件,这里是根证书的配置信息
```
执行过程中需要输入CA私钥的保护密码,假设我们输入密码: 123456
查看一下自己CA证书的内容
```shell
openssl x509 -in cacert.pem -text -noout
```
#### 准备根证书配置文件
方便以后用它来生成,在它下面的子证书
```shell
vi "$HOME/testca/conf/testca.conf"
```
写入文件内容
```shell
####################################
[ ca ]
default_ca = testca # The default ca section
 
[ testca ]
dir = $ENV::HOME/testca # top dir
database = $dir/index.txt # index file.
new_certs_dir = $dir/newcerts # new certs dir
 
certificate = $dir/cacert.pem # The CA cert
serial = $dir/serial # serial no file
private_key = $dir/private/cakey.pem # CA private key
RANDFILE = $dir/private/.rand # random number file
 
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = md5 # message digest method to use
unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
policy = policy_any # default policy
 
[ policy_any ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
 
########################################
```
制作自己的SSL证书

文章插图
 
单向认证
```shell
mkdir -p "$HOME/testca/test/server"
cd "$HOME/testca/test/server"
```
### 创建服务器私钥,并生成testca的证书请求文件
通过req命令,生成一个签名证书申请,使用rsa:1024生成新秘钥,申请证书为testkey.pem,格式为PEM,证书签名参数为-subj指定的内容
```shell
openssl req -newkey rsa:1024 -out serverreq.pem -keyout serverkey.pem -keyform PEM -outform PEM -subj "/O=ABCom/OU=servers/CN=servername"
# req 表示发起一个证书签名请求
# -nwekey rsa:1024,新建一个1024 bit的rsa秘钥
# -out 输出的证书请求文件
# -keyout 表示存放生成私钥的文件
# -keyform 表示生成的秘钥文件格式,这里是PEM
# -outform 输出的格式,DER或者PEM
# -subj 设置或修改请求证书签名主题
```
执行命令过程中输入密钥保护密码,我们输入:949494
serverkey.pem为的私钥,serverreq.pem为CA签名证书请求文件 。


推荐阅读