当我们需要在Web服务器上启用TLS或SSL时,常见做法是通过在Web服务器上安装一个证书。在nginx环境中,我们可以通过以下步骤来配置ssl加密。
1. 生成证书
我们可以通过 OpenSSL 工具来生成证书,只需要在控制台中执行以下命令即可:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
这条命令将会生成一个自签名证书,key.pem是密钥文件路径,cert.pem是证书文件路径,-days 365 参数是指证书的有效期限为 1 年。
2. 单向认证
单向认证是最简单的 SSL/TLS 配置方式。在 nginx 中,我们需要使用 ssl_certificate 指令来告诉 nginx 使用哪个证书文件。示例配置如下:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
...
}
注意,这里的 listen 指令必须指定为端口 443。ssl_certificate 指令的值应该是证书文件的路径(例如:/etc/nginx/cert.pem),而 ssl_certificate_key 指令的值应该是密钥文件的路径(例如:/etc/nginx/key.pem)。
3. 双向认证
双向认证也称为客户端认证,是在单向认证的基础上,服务器要求客户端也提供证书来鉴定客户端的身份。在 nginx 环境下,我们需要在 ssl_client_certificate 指令中指定客户端 CA 证书,如下所示:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
ssl_client_certificate /etc/nginx/ca.crt;
ssl_verify_client on;
...
}
在上述配置中,ssl_verify_client on 表示开启客户端证书验证。客户端连接时,可以使用如下 command 来生成一个自签名证书:
openssl req -new -x509 -keyout key.pem -out cert.pem -days 365
同时使用以下命令将证书文件导入浏览器:
openssl pkcs12 -export -in cert.pem -inkey key.pem -out client.p12
在浏览器中安装该证书导出文件即可。
4. 部分 HTTPS
部分 HTTPS 又称为混合模式,是在 HTTPS 中同时支持HTTPS与HTTP。
在 nginx 环境下,我们可以在 server block中针对不同的location进行不同的配置,如下所示:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
location / {
proxy_pass http://backend;
}
location /secure {
proxy_pass https://backend;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
}
}
在如上配置中,location /secure 中使用了 https 协议访问。nginx 将根据不同的 URl 区分启用 mixed SSL 或全局 SSL。 显然,这对于 WEB 应用程序使用 SSL 保护特定页面非常有用。
- 示例 1. 使用单向认证
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
location / {
proxy_pass http://backend;
}
}
- 示例 2. 使用双向认证
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
ssl_client_certificate /etc/nginx/ca.crt;
ssl_verify_client on;
location / {
proxy_pass http://backend;
}
}
总结
本教程讲解了 nginx 环境下的 SSL/TLS 配置,包括单向认证、双向认证、部分 HTTPS 三种模式。同时,提供了多种示例代码,方便理解和实践。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nginx环境下配置ssl加密(单双向认证、部分https) - Python技术站