openssl自制证书并配置nginx

概念

key:私钥

csr:证书申请文件,生成证书时要把这个提交给权威的证书颁发机构,颁发机构审核通过之后,再根据这些申请信息生成相应的证书。

crt:证书

一般流程

1.创建服务器私钥

2.生成证书请求文件并发送给证书颁发机构(自签代替)获取证书

3.部署

实现

生成(待部署服务器上的)证书

1.创建服务器私钥

openssl genrsa -out server.key 2048 #rsa算法    2048长度
#openssl genrsa -des3 -out server.key 2048 #-des3可选,为server.key设置密码,后续用到此文件时要输入密码

2.生成证书请求文件

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

3.发送给CA获取证书获取签名

此步骤由自制根证书签名代替,步骤如下:

自制CA根证书并模拟颁发证书

1.创建根证书私钥

openssl genrsa -out ca.key 2048

2.创建根证书

openssl req -new -x509 -sha256 -days 365 -key ca.key -out ca.crt
#填写信息的时候CN项(Common Name (e.g. server FQDN or YOUR name))填写本机的hostname即可
#它代表颁发者

#其实上述命令可拆分成两条命令理解
#1.生成证书请求
#openssl req -new -key ca.key -out ca.csr
#2.自签署
#openssl x509 -req -sha256 -days 365 -in ca.csr -signkey ca.key -out ca.crt

3.模拟根证书签名颁发证书

将待部署服务器上生成的请求文件(csr)拿过来

openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt \
 -CAkey ca.key -CAcreateserial -out server.crt

特别注意:上述命令生成的证书使用后,浏览器还是会报错:NET::ERR_CERT_COMMON_NAME_INVALID

解决办法:创建文本文件ext.conf,内容如下:

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.110.160
#如果是域名
#DNS.1=www.test.com
openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt \
-CAkey ca.key -CAcreateserial -out server.crt -extfile ext.conf

生成的server.crt即为服务器所需的证书

部署

1.服务器部署

安装好nginx,修改配置/etc/nginx/nginx.conf


    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /userdata/caTest/server/server.crt;
        ssl_certificate_key  /userdata/caTest/server/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

nginx重载配置或重启服务,服务器部署完成。

2.客户端

下载ca.crt,并安装。

openssl自制证书并配置nginx_第1张图片

 openssl自制证书并配置nginx_第2张图片

 openssl自制证书并配置nginx_第3张图片

 将ca证书添加信任后,所有由此ca签名的server都会被信任,无需重复添加。

至此,所有配置完成。

效果图:

openssl自制证书并配置nginx_第4张图片

双向认证

1.生成客户端私钥

openssl genrsa -out client-key.key 2048

2.生成证书请求

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

3.生成客户端证书

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


#生成客户端p12格式根证书(密码设置)
openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12

4.配置nginx

    # HTTPS server
    #
    server {
        listen       443 ssl;
        server_name  localhost;

        ssl_certificate      /userdata/caTest/server/server.crt;
        ssl_certificate_key  /userdata/caTest/server/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        #客户端认证
        ssl_client_certificate /userdata/caTest/ca/ca.crt;
        ssl_verify_client on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }

5.客户端证书导入

下载client.p12到客户端,导入到浏览器。

设置->安全 ->证书管理->个人->导入->client.p12

你可能感兴趣的:(nginx,https,ssl)