Nginx (读音"engine x") 是一个高性能的HTTP和反向代理服务器,比Apache占用更少的内存,同时也像Apache一样支持HTTPS方式访问(SSL加密)。本教程基于 Ubuntu Lucid (10.04),简单阐述如何在Nginx上部署HTTPS网站。
1、名词释义
CA(Certificate Authority):数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。
SSL(Secure Sockets Layer):安全套接层,它指定了在应用程序协议(如HTTP、Telnet、FTP)和TCP/IP之间提供数据安全性分层的机制,它是在传输通信协 议(TCP/IP)上实现的一种安全协议,采用公开密钥技术,它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。
证书链(certificate chain):包含信任锚(CA 证书)和已签名证书。Web浏览器已预先配置了一组浏览器自动信任的根CA证书。来自其他证书授权机构的所有证书都必须附带证书链,以检验这些证书的有效 性。证书链是由一系列CA证书发出的证书序列,最终以根CA证书结束。
2、为Nginx准备SSL证书
SSL证书可以由CA提供,也可使用本机生成一个证书(自签名证书),但是自签名证书不会被浏览器认可,浏览网页时浏览器有警告信息。假设已经从CA购买了一个证书,将会获得以下证书文件:
SSL证书文件(.crt文件)、SSL证书.key文件、SSL证书链文件(.pem文件,CA公布在其网站上)
CA颁发的.crt证书文件内容大致如下:
-----BEGIN CERTIFICATE-----
......
-----END CERTIFICATE-----
将CA提供的.pem文件内容需要粘贴到.crt文件后面,供Nginx使用,和Apache的配置略有区别。
CA颁发的.key证书文件内容大致如下:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,......
......
-----END RSA PRIVATE KEY-----
3、Nginx安装与SSL部署
sudo apt-get install nginx
编辑配置文件
sudo vim /etc/nginx/sites-available/default
配置示例
server {
listen 443; //HTTPS协议使用443端口
#listen 80;
server_name www.server110.com;
ssl on;
ssl_certificate ssl/cp.crt; //crt文件存放路径
ssl_certificate_key ssl/cp.key; //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;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
## Default location
location / {
root /var/www;
index index.php;
}
}
4、重启Nginx,完成
sudo service nginx restart
重启过程中一般会询问PEM pass phrase,这是因为RSA私钥文件有密语保护。CA在颁发证书的时候设定了一个密语保护,在知道密语的情况下,可以用OpenSSL去除保护,重启Nginx的时候就不会提示输入密语。