<返回更多

制作自己的SSL证书

2020-10-13    
加入收藏

先做一个服务端单向认证,最后完成一个服务端客户端双向认证

 

制作一个CA私服,取名叫testca。

### 准备CA工作目录

```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签名证书请求文件。

查看请求文件内容

```shell

openssl req -in serverreq.pem -text -noout

```

### CA签发证书

```shell

openssl ca -in serverreq.pem -out servercert.pem -config "$HOME/testca/conf/testca.conf"

```

执行过程中需要输入CA私钥的保护密码,前面设置的123456。

查看证书内容

```shell

openssl x509 -in servercert.pem -text -noout

```Nginx配置

找到nginx运行的配置文件,将证书servercert.pem及私钥serverkey.pem放到配置目录下,修改内容如下

```json

http {

# 配置https服务

server {

# 开启443端口,ssl安全协议

listen 443 ssl;

server_name localhost;

# 配置证书及服务器私钥

ssl_certificate servercert.pem;

ssl_certificate_key serverkey.pem;

# 会话参数的缓存,所有工作进程之间共享的缓存

ssl_session_cache shared:SSL:1m;

ssl_session_timeout 5m;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

# 启用的密码

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

# SSLv3和TLS协议时,服务器密码优先于客户端密码

ssl_prefer_server_ciphers on;

location / {

root /data/www/;

index welcome.html;

}

}

}

```

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>