相信大家对证书已经有一个比较直关的了解,这里只讲如何创建自签证书,关于openssl的使用或者证书的相关内容,此处不做过多讲解

废话不多说,直接上手。

  一般证书分为根证书,中间证书,用户证书三级,也可以是根证书和用户证书两级,或者直接用户证书。对于单向验证一般只需要用户证书,客户端和服务端双向验证的话,则需要两级或者三级证书,对于安全性高的一般是三级证书,且根证书必须是正规的CA证书。

我们以三级证书来讲解:

1.生成CA根证书

# 创建root-ca并自签名

openssl req -x509 -newkey rsa:2048 -nodes -keyout root-ca.key -out root-ca.crt -days 3650  -subj "/C=CN/ST=hangzhou/L=test/O=test/OU=test/CN=root-ca"

# 查看创建的证书

openssl x509 -in root-ca.crt -text -noout

2生成中间证书

# 创建mid-ca的证书签名请求

openssl req -new -newkey rsa:2048 -nodes -keyout secondary-ca.key -out secondary-ca.csr -subj "/C=CN/ST=hangzhou/L=test/O=test/OU=test-it/CN=mid-ca"

# 使用root-ca签发mid-ca的证书签名请求,中间证书指的是可以允许继续生成下级证书,否则的话默认生成终端证书,即使可以用中间证书生成下一级客户端和服务端等用户证书,最终验证的无法通过,此处是非常重要的,很多使用证书链无法通过都是此处踩坑

 新建配置文件 -extfile inntext.cnf

输入内容:basicConstraints=critical,CA:TRUE

openssl x509 -req -in mid-ca.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out mid-ca.crt -days 3650  -extfile inntext.cnf

# 查看创建的证书

openssl x509 -in mid-ca.crt -text -noout

3生成服务端证书

# 创建server的证书签名请求

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr -subj "/C=CN/ST=hangzhou/L=test/O=test/OU=test-it/CN=server"

# 用mid-ca签发server的证书签名请求

openssl x509 -req -in server.csr -CA mid-ca.crt -CAkey mid-ca.key -CAcreateserial -out server.crt -days 3650

生成.net core识别的证书文件client.pfx

openssl pkcs12 -export -in server.crt -inkey server.key -out server.pfx

# 查看创建的证书

openssl x509 -in server.crt -text -noout

4生成客户端证书

# 创建client的证书签名请求

openssl req -new -newkey rsa:2048 -nodes -keyout client.key -out client.csr -subj "/C=CN/ST=hangzhou/L=test/O=test/OU=test-it/CN=client"

# 用secondary-ca签发client的证书签名请求

openssl x509 -req -in client.csr -CA mid-ca.crt -CAkey mid-ca.key -CAcreateserial -out client.crt -days 3650

# 查看创建的证书

openssl x509 -in client.crt -text -noout

生成.net core识别的证书文件client.pfx

openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

5制作证书链

# server.crt的签发是secondary-ca,而secondary-ca的签发是root-ca

# 对server.crt的验证必须使用到这两个证书,需要制作为证书链。

# 制作证书链的方法直白而简单:将证书拼接在一个文件中即可

Linux :cat root-ca.crt mid-ca.crt > chain-ca.crt

windows :type  root-ca.crt  mid-ca.crt > chain-ca.crt

验证: openssl verify -verbose -CAfile root-ca.crt server.crt 单个无法验证

验证:openssl verify -verbose -CAfile mid-ca.crt server.crt 单个无法验证

验证:openssl verify -verbose -CAfile chain-ca.crt  server.crt 合成之后在验证