nginx自颁发证书双向认证


nginx自颁发证书双向认证
查找相关文章:nginx ssl

作用,必须使用证书才能访问网络,而没有证书的将会被拒之门外

用途已经很明显了,呵呵

本文大部分来自 nginx自颁发证书双向认证 http://www.cnblogs.com/dyllove98/p/3157370.html 

其中原文未提到的,自己在用的过程中遇到的几个问题一并记录,其他基本上属于抄摘


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

修改,不改的话 可能生成的crt为空,报错

The commonName field needed to be supplied and was missing

#注释掉
#commonName             = supplied
#改为
commonName = optional


保存退出


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证书

修改/etc/pki/ca_linvo/index.txt.attr中为unique_subject = no

否则可能报错

openssl TXT_DB error number 2 failed to update database


生成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

生成windows客户端证书(原文未提及)

openssl pkcs12 -export -clcerts -in /etc/pki/ca_linvo/client/client.crt -inkey /etc/pki/ca_linvo/client/client.key -out /client.p12

下载client.p12用于客户端浏览器导入,导入方法自行搜索


5 配置nginx

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

        listen       443 ssl; #注意要加ssl 否则可能浏览器会报ssl_error_rx_record_too_long错误
        server_name  dayanmei.com;


        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