SSL双向认证-补坑篇

以下内容转自:互联网内容,但雷同太多无从知晓院创作者。本文意在补充不完整部分,如果原创作者不希望引用,请联系本人,会立即删除引用部分,仅保留作者原创内容。

该文大部分正确,但有可能有人会无法完成。请参阅文章尾部补坑小节。

1 准备工作

1.1 openssl目录准备

一般情况下openssl的配置文件都在这个目录/etc/pki/tls,so:

mkdir /etc/pki/ca_linvo

cd /etc/pki/ca_linvo

mkdir root server client newcerts

echo 01 > serial

echo 01 > crlnumber

touch index.txt

1.2 openssl配置准备

 

修改openssl配置

vi /etc/pki/tls/openssl.cnf

找到这句注释掉,替换为下面那句

#default_ca      = CA_default

default_ca      = CA_linvo

把[ CA_default ]整个部分拷贝一份,改成上面的名字[ CA_linvo ]

修改里面的如下参数:

dir = /etc/pki/ca_linvo

certificate = $dir/root/ca.crt

private_key = $dir/root/ca.key

保存退出

2 创建CA根级证书

生成key:openssl genrsa -out /etc/pki/ca_linvo/root/ca.key

生成csr:openssl req -new -key /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/root/ca.csr

生成crt:openssl x509 -req -days 3650 -in /etc/pki/ca_linvo/root/ca.csr -signkey /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/root/ca.crt

生成crl:openssl ca -gencrl -out /etc/pki/ca_linvo/root/ca.crl -crldays 7

生成的根级证书文件都在/etc/pki/ca_linvo/root/目录下

注意:创建证书时,建议证书密码设置长度>=6位,因为java的keytool工具貌似对它有要求。

3 创建server证书

生成key:openssl genrsa -out /etc/pki/ca_linvo/server/server.key

生成csr:openssl req -new -key /etc/pki/ca_linvo/server/server.key -out /etc/pki/ca_linvo/server/server.csr

生成crt:openssl ca -in /etc/pki/ca_linvo/server/server.csr -cert /etc/pki/ca_linvo/root/ca.crt -keyfile /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/server/server.crt -days 3650

说明:

1、这里生成的crt是刚才ca根级证书下的级联证书,其实server证书主要用于配置正常单向的https,所以不使用级联模式也可以:

openssl rsa -in /etc/pki/ca_linvo/server/server.key -out /etc/pki/ca_linvo/server/server.key
openssl x509 -req -in /etc/pki/ca_linvo/server/server.csr -signkey /etc/pki/ca_linvo/server/server.key -out /etc/pki/ca_linvo/server/server.crt -days 3650

2、-days 参数可根据需要设置证书的有效期,例如默认365天

4 创建client证书

生成key:openssl genrsa -des3 -out /etc/pki/ca_linvo/client/client.key 1024

生成csr:openssl req -new -key /etc/pki/ca_linvo/client/client.key -out /etc/pki/ca_linvo/client/client.csr

生成crt:openssl ca -in /etc/pki/ca_linvo/client/client.csr -cert /etc/pki/ca_linvo/root/ca.crt -keyfile /etc/pki/ca_linvo/root/ca.key -out /etc/pki/ca_linvo/client/client.crt -days 3650

说明:

1、这里就必须使用级联证书,并且可以重复该步骤,创建多套client证书

2、生成crt时可能会遇到如下报错:

openssl TXT_DB error number 2 failed to update database

参照这里进行操作。

我使用的是方法一,即将index.txt.attr中unique_subject = no

5 配置nginx

这里只列出server段的关键部分:

ssl_certificate  /etc/pki/ca_linvo/server/server.crt;#server公钥
ssl_certificate_key  /etc/pki/ca_linvo/server/server.key;#server私钥
ssl_client_certificate   /etc/pki/ca_linvo/root/ca.crt;#根级证书公钥,用于验证各个二级client
ssl_verify_client on;

重启Nginx

 

6.补坑小节

6.1坑1:unable to load private key

问题的原因是openssl.conf配置文件。

原文介绍了配置文件如何修改。但是忽略了1点。openssl是否调用的就是那个位置的配置文件。

自编译安装openssl的时候,配置文件可能不是那个文件,请确认系统到底使用了那个。不确定就都找出来,一起改了。

6.2坑2:生成证书为空

在生成server和client证书文件时,正确的输出会有要求确认的步骤,需要按y才能继续。如果没有那么输出的文件应该是空的。

解决方法:要使用CA.sh生成一个私钥备用。自己搜索一下这个脚本,一般来说它应该在一个名为misc的目录下。

命令格式: CA.sh -newca

执行完毕,会生成一个democa的子目录。下面的private目录下有一个pem文件。

将它复制到/etc/pki/ca_linvo/private下。

再次执行命令即可。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值