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/