首页 > 网站 > Nginx > 正文

nginx环境下配置ssl加密(单双向认证、部分https)

2024-08-30 12:25:57
字体:
来源:转载
供稿:网友

nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番。一开始采用的是全站加密,所有访问http:80的请求强制转换(rewrite)到https,后来自动化测试结果说响应速度太慢,https比http慢慢30倍,心想怎么可能,鬼知道他们怎么测的。所以就试了一下部分页面https(不能只针对某类动态请求才加密)和双向认证。下面分节介绍。

默认nginx是没有安装ssl模块的,需要编译安装nginx时加入--with-http_ssl_module选项。

关于SSL/TLS原理请参考 这里,如果你只是想测试或者自签发ssl证书,参考 这里 。

提示:nignx到后端服务器由于一般是内网,所以不加密。

1. 全站ssl

全站做ssl是最常见的一个使用场景,默认端口443,而且一般是单向认证。

server {    listen 443;    server_name example.com;    root /apps/www;    index index.html index.htm;    ssl on;    ssl_certificate ../SSL/ittest.pem;    ssl_certificate_key ../SSL/ittest.key;#    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;#    ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;#    ssl_prefer_server_ciphers on;}

如果想把http的请求强制转到https的话:

server { listen   80; server_name example.me; rewrite   ^  https://$server_name$request_uri? permanent;### 使用return的效率会更高 # return 301 https://$server_name$request_uri;}

ssl_certificate证书其实是个公钥,它会被发送到连接服务器的每个客户端,ssl_certificate_key私钥是用来解密的,所以它的权限要得到保护但nginx的主进程能够读取。当然私钥和证书可以放在一个证书文件中,这种方式也只有公钥证书才发送到client。

ssl_protocols

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表