ngx_http_ssl_module 模块
语法:ssl 在 | 从 ;
默认值:
ssl off;
背景:http , 服务器
支持HTTPS协议为给定的虚拟服务器。
推荐使用 ssl 参数的 听 指令而不是 这个指令。
语法:ssl_buffer_size 大小 ;
默认值:
ssl_buffer_size 16k;
背景:http , 服务器
这个指令1.5.9之后出现在版本。
集用于发送数据缓冲区的大小。
默认情况下,缓冲区的大小是16 k,这对应于最小 当发送大开销的反应。 减少时间第一个字节上使用更小的值,可能是有利的 例如:
ssl_buffer_size 4k;
语法:ssl_certificate 文件 ;
默认值:- - - - - -
背景:http , 服务器
指定一个 文件 证书的PEM格式 对于给定的虚拟服务器。 如果指定中级证书应该除了初选 相同的文件中指定的证书,他们应该在以下 秩序:初级证书在先,那么中级证书。 密钥在PEM格式可能放置在相同的文件。
它应该记住由于HTTPS协议的限制 虚拟服务器应该听不同的IP地址:
server {
listen 192.168.1.1:443;
server_name one.example.com;
ssl_certificate /usr/local/nginx/conf/one.example.com.cert;
...
}
server {
listen 192.168.1.2:443;
server_name two.example.com;
ssl_certificate /usr/local/nginx/conf/two.example.com.cert;
...
}
否则 第一个服务器的证书 将第二个网站公布。
语法:ssl_certificate_key 文件 ;
默认值:- - - - - -
背景:http , 服务器
指定一个 文件 密钥的PEM格式 对于给定的虚拟服务器。
的值 引擎 : 的名字 : id 可以指定的吗 文件 (1.7.9), 加载指定的密钥 id 从OpenSSL引擎 的名字 。
语法:ssl_ciphers 密码 ;
默认值:
ssl_ciphers HIGH:!aNULL:!MD5;
背景:http , 服务器
指定密码启用。 中指定的密码是可以理解的格式 OpenSSL库,例如:
ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
完整榜单可以使用 ” openssl密码 ”命令。
所使用的以前版本的nginx 不同的 默认密码。
语法:ssl_client_certificate 文件 ;
默认值:- - - - - -
背景:http , 服务器
指定一个 文件 使用受信任的CA证书的PEM格式 用于 验证 客户端证书和 OCSP反应如果 ssl_stapling 启用。
证书的列表将被发送到客户端。 如果这不是理想的, ssl_trusted_certificate 可以使用指令。
语法:ssl_crl 文件 ;
默认值:- - - - - -
背景:http , 服务器
这个指令0.8.7出现在版本。
指定一个 文件 撤销证书(CRL) PEM格式 验证 客户端证书。
语法:ssl_dhparam 文件 ;
默认值:- - - - - -
背景:http , 服务器
这个指令出现在9.7.2。
指定一个 文件 对电火花强化密码DH参数。
语法:ssl_ecdh_curve 曲线 ;
默认值:
ssl_ecdh_curve prime256v1;
背景:http , 服务器
这个指令出现在版本1.1.0和1.0.6。
指定一个 曲线 ECDHE密码。
语法:ssl_password_file 文件 ;
默认值:- - - - - -
背景:http , 服务器
1.7.3这个指令出现在版本。
指定一个 文件 与密码 密钥 其中每个密码指定在单独的行中。 密码是在装船时关键。
例子:
http {
ssl_password_file /etc/keys/global.pass;
...
server {
server_name www1.example.com;
ssl_certificate_key /etc/keys/first.key;
}
server {
server_name www2.example.com;
# named pipe can also be used instead of a file
ssl_password_file /etc/keys/fifo;
ssl_certificate_key /etc/keys/second.key;
}
}
语法:ssl_prefer_server_ciphers 在 | 从 ;
默认值:
ssl_prefer_server_ciphers off;
背景:http , 服务器
指定服务器密码应该优先于客户 密码在使用SSLv3和TLS协议。
语法:ssl_protocols ( SSLv2的站点时 ] ( SSLv3 ] ( TLSv1 ] ( TLSv1.1 ] ( TLSv1.2 ];
默认值:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
背景:http , 服务器
使指定的协议。 的 TLSv1.1 和 TLSv1.2 参数的工作 只有当使用OpenSSL库版本1.0.1或更高。
的 TLSv1.1 和 TLSv1.2 参数是 支持从版本1.1.13和1.0.12开始, 所以,当OpenSSL 1.0.1版本或更高 使用旧的nginx版本,这些协议工作,但不能 被禁用。
语法:ssl_session_cache 从 | 没有一个 | ( 内装式 [: 大小 ]] ( 共享 : 的名字 : 大小 ];
默认值:
ssl_session_cache none;
背景:http , 服务器
集的类型和大小的缓存存储会话参数。 缓存可以下列类型:
从
严禁使用会话缓存: nginx明确告诉客户端会话可能不被重用。
没有一个
使用会话缓存轻轻不允许: nginx告诉客户端会话可能被重用,但是没有 实际上在缓存中存储会话参数。
内装式
缓存建于OpenSSL,只使用一个工作进程。 缓存大小在会话中指定。 如果尺寸不是给定的,它等于20480。 使用内置缓存可能导致内存碎片。
共享
所有工作进程之间共享一个缓存。 缓存大小指定字节,一个字节的存储 约4000人会议。 每个共享缓存应该有一个任意的名称。 名称相同的缓存可以用于多个虚拟服务器。
两种缓存类型可以同时使用,例如:
ssl_session_cache builtin:1000 shared:SSL:10m;
但没有内置缓存应该只使用共享缓存 更有效率。
语法:ssl_session_ticket_key 文件 ;
默认值:- - - - - -
背景:http , 服务器
这个指令1.5.7出现在版本。
设置一个 文件 密钥用于加密 和解密TLS会话门票。 该指令是非常必要的,如果相同的密钥必须之间共享 多个服务器。 默认情况下,使用一个随机生成的密钥。
如果指定了几个键,只有第一个是关键 使用TLS加密会话门票。 这使得配置键旋转,例如:
ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;
的 文件 必须包含48字节的随机数据,可以吗 使用以下命令创建:
openssl rand 48 > ticket.key
语法:ssl_session_tickets 在 | 从 ;
默认值:
ssl_session_tickets on;
背景:http , 服务器
这个指令1.5.9之后出现在版本。
会话恢复通过启用或禁用 TLS会话门票 。
语法:ssl_session_timeout 时间 ;
默认值:
ssl_session_timeout 5m;
背景:http , 服务器
指定一个时间期间,客户可以重用 会话参数存储在缓存中。
语法:ssl_stapling 在 | 从 ;
默认值:
ssl_stapling off;
背景:http , 服务器
这个指令出现在版本1.3.7。
启用或禁用 装订 OCSP的反应 由服务器。 例子:
ssl_stapling on;
resolver 192.0.2.1;
OCSP的装订工作,服务器证书的证书 发行人应该是知道的。 如果 ssl_certificate 文件是否 不包含中级证书, 服务器证书的证书发行者 出现在 ssl_trusted_certificate 文件。
解决OCSP应答器主机名, 的 解析器 指令 还应该指定。
语法:ssl_stapling_file 文件 ;
默认值:- - - - - -
背景:http , 服务器
这个指令出现在版本1.3.7。
设置时,钉将取自OCSP响应 指定的 文件 而不是查询 中指定的OCSP应答服务器证书。
DER格式的文件应该产生的 ” openssl ocsp ”命令。
语法:ssl_stapling_responder url ;
默认值:- - - - - -
背景:http , 服务器
这个指令出现在版本1.3.7。
覆盖OCSP应答器的URL中指定 ” 权威 信息访问 “证书扩展。
只有“ http:// “OCSP反应者支持:
ssl_stapling_responder http://ocsp.example.com/;
语法:ssl_stapling_verify 在 | 从 ;
默认值:
ssl_stapling_verify off;
背景:http , 服务器
这个指令出现在版本1.3.7。
启用或禁用验证OCSP响应的服务器。
为验证工作,服务器证书的证书 发行人、根证书和所有中级证书 应该配置为信任的使用 ssl_trusted_certificate 指令。
语法:ssl_trusted_certificate 文件 ;
默认值:- - - - - -
背景:http , 服务器
这个指令出现在版本1.3.7。
指定一个 文件 使用受信任的CA证书的PEM格式 用于 验证 客户端证书和 OCSP反应如果 ssl_stapling 启用。
与设定的证书 ssl_client_certificate , 这些证书的列表将不会被发送到客户端。
语法:ssl_verify_client 在 | 从 | 可选 | optional_no_ca ;
默认值:
ssl_verify_client off;
背景:http , 服务器
支持客户端证书的验证。 验证的结果存储在 ssl_client_verify美元 变量。
的 可选 参数(0.8.7 +)请求客户机 证书和验证,如果证书。
的 optional_no_ca 参数(1.3.8 1.2.5) 请求客户端 证书但不需要受信任的CA签署的证书。 这是用于服务时使用的情况下,外部nginx 执行实际的证书验证。 证书的内容通过访问 ssl_client_cert美元 变量。
语法:ssl_verify_depth 数量 ;
默认值:
ssl_verify_depth 1;
背景:http , 服务器
设置验证客户端证书链中的深度。
错误处理
的 ngx_http_ssl_module 模块支持多种 非标准的错误代码,可用于重定向使用 error_page 指令:
495年
一个错误发生在客户端证书验证;
496年
客户没有提供所需的证书;
497年
常规请求已经发送到HTTPS端口。
重定向请求完全解析和后发生 的变量,如 request_uri美元 , 美元的uri , args美元 和其他人来说,是可用的。
嵌入变量
的 ngx_http_ssl_module 模块支持 一些嵌入式变量:
ssl_cipher美元
返回字符串使用的密码 对于一个建立SSL连接;
ssl_client_cert美元
PEM格式返回客户端证书 对于一个建立SSL连接,每一行除了第一 用制表符前缀; 这是用于使用的 proxy_set_header 指令;
ssl_client_fingerprint美元
返回客户端证书的SHA1指纹 对于一个建立SSL连接(1.7.1上);
ssl_client_raw_cert美元
PEM格式返回客户端证书 对于一个建立SSL连接;
ssl_client_serial美元
返回客户端证书的序列号 对于一个建立SSL连接;
ssl_client_s_dn美元
返回客户端证书的“DN”主题字符串 对于一个建立SSL连接;
ssl_client_i_dn美元
返回字符串“发行人DN的客户机证书 对于一个建立SSL连接;
ssl_client_verify美元
返回客户端证书验证的结果: ” 成功 ”、“ FAILED”, and “NONE” if a certificate was not present;
$ssl_protocol
returns the protocol of an established SSL connection;
$ssl_server_name
returns the server name requested through SNI (1.7.0);
$ssl_session_id
returns the session identifier of an established SSL connection;
$ssl_session_reused
returns “r” if an SSL session was reused, or “.” otherwise (1.5.11).
----------------------------------------------------------------
nginx配置HTTPS - 使用ssl模块配置同时支持http和https并存
爱森家园 2012-12-10 15:58 | Nginx&Tengine Https && SSL
项目需求:webservice接口需要通过https访问。
思路:用nginx进行配置,方便灵活。 也可以用resin或者tomcat配置
测试环境:centos 6.3 、nginx 1.0.15(web服务器) 、resin3.1.12(应用服务器)
参考文档:http://wiki.nginx.org/NginxHttpSslModule
(centos6.3默认已经安装过OpenSSL库)
一、生成证书:
可以通过以下步骤生成一个简单的证书:
Copy
# 1、首先,进入你想创建证书和私钥的目录,例如: cd /etc/nginx/ # 2、创建服务器私钥,命令会让你输入一个口令: openssl genrsa -des3 -out server.key 1024 # 3、创建签名请求的证书(CSR): openssl req -new -key server.key -out server.csr # 4、在加载SSL支持的Nginx并使用上述私钥时除去必须的口令: cp server.key server.key.org openssl rsa -in server.key.org -out server.key # 5、最后标记证书使用上述私钥和CSR: openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
二、配置nginx:
Copy
#进入nginx目录 cd /etc/nginx/conf.d vi ssl.conf
修改Nginx配置文件,让其包含新标记的证书和私钥,下面是我的配置文件:
Copy
# # HTTPS server configuration # server { listen 443; server_name localhost; ssl on; ssl_certificate /etc/nginx/server.crt; ssl_certificate_key /etc/nginx/server.key; ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; # ssl_prefer_server_ciphers on; location / { #root html; #index testssl.html index.html index.htm; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.3.94/ssl/; } }
重启nginx,在浏览器输入:https://192.168.3.94 会跳转到 http://192.168.3.94/ssl/ 这个地址(后期调整为webservice接口地址即可)
三、受浏览器信任的StartSSL免费SSL证书:
跟VeriSign一样,StartSSL(网址:http://www.startssl.com,公司名:StartCom)也是一家CA机构,
它的根证书很 久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。
四、项目需要,将访问目录 \services\ 由http访问 重定向到 https (解决方法:nginx rewrite 加上 location 方式实现)
Copy
location ~ /services/.*$ { if ($server_port ~ "^80$"){ set $rule_0 1$rule_0; } if ($rule_0 = "1"){ rewrite /(.*) https://192.168.3.184/$1 permanent; break; } }
/usr/share/nginx/