设为首页 收藏本站
查看: 1109|回复: 0

[经验分享] 实战Nginx(6)-ssl模块简单应用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-29 09:18:35 | 显示全部楼层 |阅读模式
一.模块简介:
本模块用于HTTPS的支持
它支持使用以下两个限制检查客户端证书:
1.不允许指定过期证书列表。
2.如果有一个证书链文件,无须向apache那样指定每个证书文件。

二.模块指令
  • SSL指令
1
2
3
4
5
6
语法:
Syntax:ssl on | off;
默认值:
Default:ssl off;
应用配置段::
Context:http, server



为一个server{...}虚拟主机开启HTTPS

2.ssl_certificate指令
1
2
3
4
5
6
语法:
Syntax:ssl_certificate file;
默认值:
Default:—
配置段:
Context:http, server



为当前的虚拟主机指定PEM格式的证书文件。

3.ssl_certificate_key指令
1
2
3
4
5
6
语法:
Syntax:ssl_certificate_key file;
默认值:
Default:—
配置段:
Context:http, server



为当前的虚拟主机指定PEM格式的私钥文件。

4.ssl_client_certificate指令
1
2
3
4
5
6
语法:
Syntax:ssl_client_certificate file;
默认值:
Default:—
配置段:
Context:http, server




5.ssl_dhparam指令
1
2
3
4
5
6
语法:
Syntax:ssl_dhparam file;
默认值:
Default:—
配置段:
Context:http, server



This directive appeared in version 0.7.2.
此指令出现于nginx 0.7.2版
指定PEM格式含有Diffie-Hellman参数的文件,用于TLS会话键。

6.ssl_ciphers指令
1
2
3
4
5
6
语法:
Syntax:ssl_ciphers ciphers;
默认值:
Default:ssl_ciphers HIGH:!aNULL:!MD5;
配置段:
Context:http, server




指定许可密码的描述。密码以openssl支持的格式指定;使用以下命令可以查看openssl支持的完整格式列表:
openssl ciphers

7.ssl_crl指令
1
2
3
4
5
6
语法:
Syntax:ssl_crl file;
默认值:
Default:—
配置段:
Context:http, server



This directive appeared in version 0.8.7.
此指令在nginx 0.8.7版本开始出现
指定一个PEM格式的证书吊销文件,用于检查客户端证书。

8.ssl_prefer_server_ciphers指令
1
2
3
4
5
6
语法:
Syntax:ssl_prefer_server_ciphers on | off;
默认值:
Default:ssl_prefer_server_ciphers off;
配置段:
Context:http, server



对SSLv3和TLSv1协议的服务器端密码需求优先级高于客户端密码。

9.ssl_protocols指令
1
2
3
4
5
6
语法:
Syntax:ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
默认值:
Default:ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
配置段:
Context:http, server



指定使用的SSL协议

10.ssl_verify_client
1
2
3
4
5
6
语法:
Syntax:ssl_verify_client on | off | optional | optional_no_ca;
默认值:
Default:ssl_verify_client off;
配置段:
Context:http, server



是否开启客户端证书验证。参数“ask”在客户端主动提出检查证书时,对客户端证书进行检查。

11.ssl_verify_depth
1
2
3
4
5
6
语法:
Syntax:ssl_verify_depth number;
默认值:
Default:ssl_verify_depth 1;
配置段:
Context:http, server



设置客户端证书链的深度。

12.ssl_session_cache指令
1
2
3
4
5
6
语法:
Syntax:ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
默认值:
Default:ssl_session_cache none;
配置段:
Context:http, server




设置用来存储SSL会话缓存类型和大小。
缓存类型分类:
1
2
3
4
off         #硬关闭:明确告诉客户端这个会话不可用;
none     #软关闭:告诉客户端会话能被重用,但Nginx实际上不会重用它们。
builtin     #OpenSSL内置缓存,仅可用于一个工作进程;缓存大小用户会话数来指定。注意:使用该指令会导致内存碎片,慎用。
shared      #位于所有工作进程的共享缓存。缓存大小用字节数指定,1MB缓存能容纳4000会话。每个共享缓存必须拥有字节的名称,同名的缓存可以用于多个虚拟主机。




你可以同时使用builtin和shared,实例如下
ssl_session_cache builtin:1000 shared:SSL:10m;

然而,只使用共享内存而不使用builtin缓存,将更有效。

13.ssl_session_timeout指令
1
2
3
4
5
6
语法:
Syntax:ssl_session_timeout time;
默认值:
Default:ssl_session_timeout 5m;
配置段:
Context:http, server



设置客户端能够重复使用存储在缓存中的会话参数时间。


三.虚拟主机的SSL配置
默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数。

1.CA证书服务器创建
a.私钥生成
1
2
3
4
5
6
[iyunv@www ~]# cd /etc/pki/CA/
[iyunv@www CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus
......+++
......................+++
e is 65537 (0x10001)




b.生成自签署证书:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:sut31
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:www.stu31.com
Email Address []:admin@stu31.com




c.生成索引数据库文件及序列号文件:
1
2
3
4
[iyunv@www CA]# touch index.txt
[iyunv@www CA]# echo 01 >serial
[iyunv@www CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial




2.为bbs.stu31.com网站生成证书
a.web服务器生成私钥
1
2
3
4
5
6
7
[iyunv@www CA]# mkdir /etc/nginx/certs
[iyunv@www CA]# cd /etc/nginx/certs
[iyunv@www certs]# (umask 077; openssl genrsa -out nginx.key 2048)
Generating RSA private key, 2048 bit long modulus
.....................................................+++
................................................................+++
e is 65537 (0x10001)




b.生成证书签署请求文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[iyunv@www certs]# openssl req -new -key nginx.key -out nginx.csr -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HA
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:sut31
Organizational Unit Name (eg, section) []:ops
Common Name (eg, your name or your server's hostname) []:bbs.stu31.com
Email Address []:admin@stu31.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:




3.配置nginx服务器使用数字证书
a.CA服务器签署nginx服务器的请求证书
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[iyunv@www certs]# openssl ca -in nginx.csr -out nginx.crt -days 3650
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Dec 27 23:11:47 2014 GMT
            Not After : Dec 24 23:11:47 2024 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HA
            organizationName          = sut31
            organizationalUnitName    = ops
            commonName                = bbs.stu31.com
            emailAddress              = admin@stu31.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                16:5B:54:BF:51:25:DF:8A:0D:9C:FE:09:B1:65:E1:AB:A6:CA:9E:2A
            X509v3 Authority Key Identifier:
                keyid:36:8D:23:60:59:82:3E:EA:ED:F6:02:DC:09:EB:17:04:A4:AB:06:51
Certificate is to be certified until Dec 24 23:11:47 2024 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated



1
2
[iyunv@www ~]# ls /etc/nginx/certs/
nginx.crt  nginx.csr  nginx.key



3.为nginx的虚拟主机bbs.stu31.com开启https
额外添加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[iyunv@www ~]# vim /etc/nginx/extra/nginx-vhost.conf
server {
        listen 443 ssl;
        server_name bbs.stu31.com;
        ssl_certificate         /etc/nginx/certs/nginx.crt;
        ssl_certificate_key     /etc/nginx/certs/nginx.key;
        ssl_session_cache       shared:SSL:1m;
        ssl_session_timeout     5m;
        ssl_ciphers             HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers   on;
        location / {
                root /www/vhosts/bbs.stu31.com;
                index index.html index.htm;
                access_log /var/log/nginx/https.bbs.stu31.com-access.log main;
        }
}





4.重启测试:
1
2
3
[iyunv@www ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful



重启nginx
1
2
3
4
5
[iyunv@www ~]# service nginx restart                                   
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Stopping nginx:                                            [  OK  ]
Starting nginx:                                            [  OK  ]




先到客户端安装CA服务器的证书
#复制证书到客户端
wKiom1SfwWGTdHloAAQt4p5eLnk457.jpg 安装证书:
wKioL1Sfwjbimq24AAGMGDLmMKc251.jpg
这样就可以通过以下方式访问:
wKiom1SfwayA2yZaAAFjRwLZ-To309.jpg

至此,Nginx的ssl模块就介绍完毕!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-39528-1-1.html 上篇帖子: 实战Nginx(5)-图片防盗链模块及URL重写模块 下篇帖子: 初识Nginx——nginx的编译、安装及特点(一)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表