# Nginx配置证书实现客户端与服务器双向认证

- Link: https://www.xuepaijie.com/html/skill/devops/608.html
- Published: 2016-05-12T17:50:47+08:00
- Author: Admin

正常配置下的SSL是服务器认证，但是有时候为了加强校验，将会引入双向认证（多用于内部
服务）。

首先配置 nginx ssl，在 nginx 配置文件中加入：

    ```html;
    ssl on;
    ssl_certificate /usr/local/ssl/xxx.crt;
    ssl_certificate_key /usr/local/ssl/xxx.key;
    ```

![导入ssl](https://www.xuepaijie.com/wp-content/uploads/2019/01/c0da0448477dbefa0a74df6d184a477e.
jpg)

之后可以将自己签署的 ca 根证书加入电脑的信任列表（此举为了让浏览器通过SSL核验）：

1、首先下载 ca.crt 到本地，在 windows 上直接双击打开；

2、点击安装按钮，过程中证书安装选择添加到受信任的根证书颁发机构，确认完成后即可。

重启浏览器后访问，一般是通过了，不会提示证书有误的警告了。火狐浏览器不与IE共享证书
库，可能需要另导入一份，具体的参考本站文章。

在上一步成功后，在 nginx 配置文件中加入：

    ```html;
    ssl_client_certificate /usr/local/ssl/ca.crt;
    ssl_verify_client on;
    ```

其中 ssl_client_certificate 配置 ca 的 crt 地址。

生成并安装p12证书（简称个人客户端证书）：

    ```html;
    openssl pkcs12 -export -clcerts -in xxx.crt -inkey xxx.key -out xxx.p12
    ```

这一步是利用网站已有的 crt 和 key 来生成，可能需要输入密码完成。

将生成的证书下载到本地，在 windows 上双击安装，过程参考上方，不同的是安装p12将证书
需要安装到个人（路径选择），重启浏览器检查是否成功。

附：

如果没有导入证书，则会直接提示400错误，而如果已成功导入证书在访问的时候就可以直接
进入（可能会提示你选择证书）。
