nginx配置ssl双向验证 nginx https ssl证书配置

Nginx是一款开源、高性能、轻量级的Web服务器和反向代理服务器,既可以用于静态资源服务器,也可以用于动态程序的反向代理服务器。在传输敏感数据时使用SSL证书是非常重要的,然而仅使用单向认证可能会存在风险。为了进一步提高安全性,SSL双向认证是非常必要的。

SSL双向认证,也被称为客户端认证,建立在原本的SSL/TLS协议上。单向认证只是服务器对客户端的认证,而SSL双向认证同时认证客户端和服务器。客户端在向服务器发送请求时,除了向服务器公开自己的SSL证书以外,还要验证服务器的SSL证书是否合法。

下面将介绍如何在Nginx中配置SSL双向认证。

1. 生成证书

我们首先需要生成证书,这里我们使用openssl来生成。

```bash

mkdir cert

openssl genrsa -out cert/ca.key 2048

openssl req -new -x509 -days 365 -key cert/ca.key -out cert/ca.crt

openssl genrsa -out cert/server.key 2048

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

openssl x509 -req -days 365 -in cert/server.csr -CA cert/ca.crt -CAkey cert/ca.key -out cert/server.crt

```

生成的cert文件夹中有以下文件:

- ca.crt:根证书,用于签署服务器和客户端证书

- ca.key:根证书的私钥

- server.crt:服务器证书

- server.csr:服务器证书签发请求,用于向CA(Certificate Authority,证书授权机构)申请证书

- server.key:服务器证书的私钥

接下来,我们需要生成客户端证书,可以创建一个client文件夹,然后执行以下命令:

```bash

mkdir client

openssl genrsa -out client/client.key 2048

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

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

```

生成的client文件夹中有以下文件:

- client.crt:客户端证书

- client.csr:客户端证书签发请求,用于向CA申请证书

- client.key:客户端证书的私钥

2. 编辑Nginx配置文件

我们需要在Nginx的配置文件中添加SSL双向认证的部分。以下是一个基本配置文件的示例:

```nginx

worker_processes auto;

pid /run/nginx.pid;

events {

worker_connections 1024;

}

http {

server {

listen 443 ssl;

server_name example.com;

ssl_certificate /path/to/cert/server.crt;

ssl_certificate_key /path/to/cert/server.key;

# 客户端证书验证需要的文件

ssl_client_certificate /path/to/cert/ca.crt;

# 设置TLS版本,根据需要进行修改,建议使用TLSv1.2

ssl_protocols TLSv1.2;

# 是否验证客户端证书

ssl_verify_client on;

# 将客户端证书的DN(Distinguished Name,颁发者唯一标识)信息写入Nginx变量

ssl_verify_client_name on;

ssl_client_name $ssl_client_s_dn;

location / {

root /var/www/html;

}

}

}

```

以上配置文件中,配置了Nginx监听443端口并启用SSL功能,指定了服务器证书和私钥。我们还指定了客户端证书验证需要的文件,并设置了TLS版本。将ssl_verify_client设置为on后,客户端必须提供合法的证书才能和服务器建立连接。

3. 测试

完成以上配置后,我们需要对其进行测试,确保其能够正常工作。

首先,我们使用curl生成客户端证书请求,并请求证书:

```bash

openssl genrsa -out client.key 2048

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

openssl x509 -req -in client.csr -CA cert/ca.crt -CAkey cert/ca.key -CAcreateserial -out client.crt

curl --cert client.crt --key client.key https://example.com

```

假设我们将生成的证书存放在了client文件夹中,curl命令在请求时使用了--cert和--key选项来指定证书和私钥。

如果一切正常,Nginx将会向客户端发送服务器证书,客户端会向服务器发送自己的证书信息,并在通过根证书验证后与服务器建立连接,最终我们将会在终端上看到类似以下的信息:

```bash

400 No required SSL certificate was sent

400 Bad Request

No required SSL certificate was sent


nginx/1.10.3 (Ubuntu)

```

这是因为我们没有为请求指定证书,如果再次发起请求,但是不使用证书,Nginx将会拒绝请求。

```bash

curl https://example.com

```

此时curl将会输出以下信息:

```bash

curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure

```

这是因为Nginx拒绝了没有证书的请求。

4. 注意事项

在使用SSL双向认证时,需要注意以下几点:

1. 证书和私钥的存储位置。需要保证服务器证书、服务器私钥、客户端证书和客户端私钥存放在不同的位置。

2. 安全设置。需要严格限制证书和私钥的访问权限,以避免潜在的安全漏洞。

3. 证书签名。需要使用权威的CA或者自己的CA来签署证书,以确保其可信度。

4. SSL版本。需要使用高版本的SSL或TLS协议,以提升安全性。

总之,SSL双向认证是一种非常重要的安全保障措施,虽然配置有一定的复杂度,但是一旦配置成功,能够极大地提高服务器和客户端之间的安全性。

壹涵网络我们是一家专注于网站建设、企业营销、网站关键词排名、AI内容生成、新媒体营销和短视频营销等业务的公司。我们拥有一支优秀的团队,专门致力于为客户提供优质的服务。

我们致力于为客户提供一站式的互联网营销服务,帮助客户在激烈的市场竞争中获得更大的优势和发展机会!

点赞(93) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部