NGINX配置https双向认证(自签一级证书)

一 生成自签证书

以下是生成自签证书(包括服务端和客户端的证书)的步骤,以下命令执行两次,分别生成客户端和服务端证书和私钥。具体执行可以先建两个目录client和server,分别进入到这两个目录下执行下面的命令。

  1. 生成私钥
    首先,你需要生成一个私钥。通常使用RSA算法,你可以通过以下命令生成一个2048位的私钥:

    openssl genrsa -out private.key 2048
    

    这里private.key是你的私钥文件名。

  2. 生成证书签名请求(CSR)
    使用私钥生成一个证书签名请求(CSR)。在这一步,你需要提供一些组织和个人的信息。

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

    执行此命令后,OpenSSL会提示你输入一些信息,如国家代码(C)、州或省份(ST)、城市(L)、组织名称(O)、通用名称(CN)等。这些信息将被包含在你的CSR中。

  3. 生成自签证书
    最后,使用私钥和CSR生成自签证书。你可以指定证书的有效期。

    openssl x509 -req -days 365 -in csr.csr -signkey private.key -out certificate.crt
    

    -days 365表示证书有效期为365天。certificate.crt是生成的自签证书文件名。

  4. 验证证书
    你可以使用以下命令来验证生成的证书:

    openssl x509 -in certificate.crt -text -noout
    

    这个命令会显示证书的详细信息,确保所有信息都是正确的。

  5. (可选)生成PEM格式的证书链文件
    如果你需要将自签证书和中间证书(如果有的话)合并成一个PEM格式的文件,可以使用以下命令:

    cat certificate.crt intermediate.crt > chain.pem
    

    如果你只有一个自签证书,这一步可以跳过。

  6. 重命名证书
    利用上面的命令可以得到私钥[private.key]和证书[certificate.crt],为了区分服务端和客户端,将其重新命名为[private-client.key]/[certificate-client.crt]和[private-server.key]/[certificate-server.crt]

二 生成浏览器端验证时需要导入到windows中的pfx文件

使用以下命令将[private-client.key]/[certificate-client.crt]合并成一个PFX文件:

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

在这个命令中:

  • -out certificate-client.pfx 指定输出的PFX文件名。
  • -inkey private-client.key 指定私钥文件。
  • -in certificate-client.crt 指定证书文件。
  • -certfile certificate-client.crt 指定CA证书文件(如果你有中间证书或链证书,也需要包含在内),自签证书这里放了和-in一样的证书。
    执行命令后,OpenSSL会提示你输入一个密码来保护PFX文件。这个密码将在导入PFX文件时需要。

三 NGINX配置ssl证书

包括配置服务端证书、开启客户端证书验证、配置客户端证书的验证证书。
     server {
         listen       9443 ssl http2;
         listen       [::]:9443 ssl http2;
         server_name  xxx.xxx.cn;
         ssl_certificate "certificate-server.crt";
         ssl_certificate_key "private-server.key";
         ssl_client_certificate "certificate-client.crt";  # CA根证书路径,用于验证客户端证书
         ssl_verify_client on;  # 开启客户端证书验证
         ssl_session_cache shared:SSL:1m;
         ssl_session_timeout  10m;
         ssl_ciphers PROFILE=SYSTEM;
         ssl_prefer_server_ciphers on;
         include /etc/nginx/default.d/*.conf;
         location / {
             proxy_pass http://127.0.0.1:8081/;
         }
     }

四 在windows中导入pfx文件

直接双击pfx文件,按提示导入即可。导入过程需要输入密码。截取部分图片;
在这里插入图片描述
在这里插入图片描述

导入成功后可以在证书管理查看导入的证书
在这里插入图片描述

在这里插入图片描述
打开浏览器第一次访问服务时会让我们选择证书:
在这里插入图片描述

五 解决浏览器提示自签服务端证书不受信任问题

在这里插入图片描述
一般是将服务端证书导入到受信任的根证书中即可解决。
在这里插入图片描述

### 实现Nginx双向HTTPS客户端证书验证 为了在Nginx中启用双向HTTPS认证,即不仅服务器向客户端证明自己的身份,而且客户端也需要向服务器提交合法的身份凭证——这通常通过SSL/TLS协议中的X.509数字证书机制来达成。具体操作如下: #### 创建必要的证书和密钥 创建一个安全的环境首先涉及到生成根CA(Certificate Authority)、服务器以及客户端所需的证书与私钥。 对于根CA而言,在命令行工具OpenSSL的帮助下执行以下指令可以生成自名的根CA证书及其对应的私钥[^3]: ```bash openssl genrsa -out ca.key 2048 openssl req -new -x509 -days 365 -key ca.key -out ca.crt ``` 接着为服务器准备相应的证书和私钥组合,同样利用上述提到的OpenSSL工具集完成这一过程: ```bash openssl genrsa -out server.key 2048 openssl req -new -key server.key -out server.csr openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt ``` 最后一步是为客户机建立专属的证书/私钥对用于后续的身份确认流程之中: ```bash openssl genrsa -out client.key 2048 openssl req -new -key client.key -out client.csr openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crt ``` #### 修改Nginx配置文件支持双向TLS握手 编辑位于`nginx.conf`内的虚拟主机部分,加入特定参数以激活并定制化针对来访者的额外审查措施。确保已指定了正确的路径指向之前所制备好的各类证件材料,并开启强制性的客户方凭据检验开关[^1]。 以下是适用于大多数场景下的典型配置片段示例: ```nginx server { listen 443 ssl; server_name localhost; ssl_certificate /path/to/server.crt; ssl_certificate_key /path/to/server.key; # 客户端证书验证所需的相关设置 ssl_client_certificate /path/to/ca.crt; # CA颁发机构的公共证书 ssl_verify_client on; # 开启客户端证书验证 location / { root html; index index.html index.htm; } } ``` 以上配置意味着每当有新的HTTP请求到达时,Nginx都会检查是否存在由可信源发的有效用户级电子身份证件;如果没有找到合适的匹配项,则拒绝继续处理直至获得适当授权为止[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值