如何生成自签名双向认证证书 ssl

开始正式生成证书

1.创建CA私钥: ca.key

openssl genrsa -out ca.key 1024

2.创建根证书请求文件ca.csr:

openssl req -new -out ca.csr -key ca.key

这里需要填入配置信息:

Country Name (2 letter code) [AU]:cn 国家名(2个字母的代号)

State or Province Name (full name) [Some-State]:cq 省

Locality Name (eg, city) []:cq 市

Organization Name (eg, company) [Internet Widgits Pty Ltd]:gs 公司名

Organizational Unit Name (eg, section) []:gs  组织或部门名

Common Name (eg, YOUR name) []:doris_ca  域名或自己名字(ca证书不要用跟服务端证书或者客户端证书一个common name 会报错!)

Email Address []:   邮箱地址(不填直接回车)

A challenge password []:123456 密码

An optional company name []:gs  公司名

3.自签根证书ca.cer:

openssl x509 -req -in ca.csr -out ca.cer -signkey ca.key -CAcreateserial -days 3650

4.【这一步可做可不做】生成p12格式根证书ca.p12(密码填写123456,之前ca.csr的密码,ps:这里输入的时候是不可见的输入完成后回车即可)

openssl pkcs12 -export -clcerts -in ca.cer -inkey ca.key -out ca.p12

5.生成服务端私钥key server.key:

openssl genrsa -out server.key 1024

6.生成服务端请求文件 server.csr

openssl req -new -out server.csr -key server.key

填入证书配置信息:

Country Name (2 letter code) [AU]:cn 国家名(2个字母的代号)

State or Province Name (full name) [Some-State]:cq 省

Locality Name (eg, city) []:cq 市

Organization Name (eg, company) [Internet Widgits Pty Ltd]:gs 公司名

Organizational Unit Name (eg, section) []:gs  组织或部门名

Common Name (eg, YOUR name) []: *.test.com【适用于a.test.com ,b.test.com 等等】(尽量用服务器域名,不然会引起服务器警告,如果都是批量后缀的域名。建议用通配符域名)

Email Address []:   邮箱地址

A challenge password []:123456 密码

An optional company name []:gs  公司名

server.csr

7.生成服务端证书server.cer(ca.cer,ca.key,servr.key,server.csr这4个生成服务端证书):

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

8.生成客户端key client.key:

openssl genrsa -out client.key 1024

9.生成客户端请求文件client.csr:

openssl req -new -out client.csr -key client.key

填入证书配置信息:

Country Name (2 letter code) [AU]:cn 国家名(2个字母的代号)

State or Province Name (full name) [Some-State]:cq 省

Locality Name (eg, city) []:cq 市

Organization Name (eg, company) [Internet Widgits Pty Ltd]:gs 公司名

Organizational Unit Name (eg, section) []:gs  组织或部门名

Common Name (eg, YOUR name) []:ssl_doriszheng  签发机构\开发者人员(这里随意)

Email Address []:   邮箱地址

A challenge password []:123456 密码

An optional company name []:gs  公司名


10.生成客户端证书 client.cer:

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


11.【可做可不做】生成客户端p12格式根证书client.p12(密码设置123456):

openssl pkcs12 -export -clcerts -in client.cer -inkey client.key -out client.p12

至此,证书就制作完毕了:



服务器端配置(详细配置过程可见:https://www.jianshu.com/p/bbf853fc28f3):

server {

        listen      443 ssl;      #http的端口号是80,https的端口为443

server_namewww.test.com#服务器域名 配置多个时不要添加;号即可

    ServerName 127.0.0.1

    ServerName 192.168.0.111;

    ssl on;   #开启ssl

    ssl_certificate C:\Users\Administrator\Desktop\ssl4\server.cer;     #服务器证书文件

    ssl_certificate_key C:\Users\Administrator\Desktop\ssl4\server.key; #服务器证书密匙

    ssl_client_certificate C:\Users\Administrator\Desktop\ssl4\ca.cer;  #根证书

    ssl_verify_depth 1;

    ssl_verify_client on; #开启客户端验证

  location / {

            root   F:\PHPStudy\PHPTutorial\WWW;   #本地网站文件目录

            index  index.HTML index.html index.htm ;

        }      

        }

如何判断双向校验成功

curl -vvvv --request GET --header "Content-Type: application/json" --cacert /Users/doris/Downloads/ssl_new/ca.cer --cert /Users/doris/Downloads/ssl_new/client.cer --key /Users/doris/Downloads/ssl_new/client.key --pass NgnCert1234 "https://a.test.com"

--cacert ca证书  【第三个步骤生成】

--cert  客户端证书  【第十个步骤生成】

--key 客户端私钥  【第八个步骤生成】

问题1:curl: (60) SSL certificate problem: unable to get local issuer certificate

curl -vvvv --request GET --header "Content-Type: application/json" "https://test.ioa.tencent.com/test"

原因:请求没有带上ca证书,无法校验服务器的证书 

解决方法1:

curl 加上-cacert ca证书 校验服务器证书

curl -vvvv --request GET --header "Content-Type: application/json" --cacert /Users/doris/Downloads/ssl_new/ca.cer --cert /Users/doris/Downloads/ssl_new/client.cer --key /Users/doris/Downloads/ssl_new/client.key --pass NgnCert1234 "https://a.test.com"

解决方法2:

curl 加上-k 可以不校验服务器证书。

curl -k -vvvv --request GET --header "Content-Type: application/json" --cert /Users/doris/Downloads/ssl_new/client.cer --key /Users/doris/Downloads/ssl_new/client.key --pass NgnCert1234 "https://a.test.com"


问题2:error 18 at 0 depth lookup:self signed certificate

网上给出的答复是:

Whatever method you use to generate the certificate and key files, the Common Name value used for the server and client certificates/keys must each differ from the Common Name value used for the CA certificate. Otherwise, the certificate and key files will not work for servers compiled using OpenSSL.

When OpenSSL prompts you for the Common Name for each certificate, use different names.

解决方案:

当你在创建ca.csr, server.csr, client.csr时 要求你填写的 Common Name。

ca.csr 的common name 不能和server.csr, client.csr填的相同

参考文档链接:https://www.jianshu.com/p/094c7fc8cb85,感谢作者CQ_TYL

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容