说明:
只是为了本地测试nginx添加ssl功能,因此就本地生成了密钥,证书,但这样证书是不被信任的。
具体效果见下图:
实现:
1.使用如下命令并根据提示输入信息,生成证书
openssl genrsa -des3 -out localhost.key 1024 //创建自身密钥 openssl req -new -key localhost.key -out localhost.csr //通过密钥生成相应CSR申请文件 openssl rsa -in localhost.key -out localhost_nopass.key //生成浏览器浏览网页时不需要输入密码的密钥 openssl x509 -req -days 365 -in localhost.csr -signkey localhost.key -out localhost.crt //生成证书
2.在nginx的server配置中添加如下配置:
server { listen 443; server_name www.nobody.com nobody.com; ssl on; ssl_certificate /usr/local/nginx/conf/localhost.crt; ssl_certificate_key /usr/local/nginx/conf/localhost_nopass.key; }
注:如果HTTP和HTTPS虚拟主机的功能是一致的,可以配置一个虚拟主机,既处理HTTP请求,又处理HTTPS请求。 配置的方法是删除ssl on的指令,并在*:443端口添加参数ssl:
server { listen 80; listen 443 ssl; server_name www.nobody.com nobody.com; ssl_certificate /usr/local/nginx/conf/localhost.crt; ssl_certificate_key /usr/local/nginx/conf/localhost_nopass.key; ... }
在0.8.21版本以前,只有添加了default参数的监听端口才能添加ssl参数:listen 443 default ssl;
现在生成的证书是不受信任的,如果需要受信任的证书,需要证书颁发机构颁发(需要用钱解决)。
免费的证书颁发机构:http://www.startssl.com/ 较低版本的ie浏览器可能不支持。