现在,随着百度全站HTTPS加密的领头,SSL证书应用越来越广泛,作为服务器证书,需要在各种Nginx、Apache、IIS等服务器上部署,本文给大家介绍如何在Nginx服务器部署SSL证书,Nginx服务器部署SSL证书方法。
一、何为SSL证书,SSL证书与HTTPS的关系
SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道,从而实现:
1、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听;
2、用户可以通过服务器证书验证他所访问的网站是否真实可靠。
HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层。HTTPS 不同于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443。
二、SSL证书的应用站点
1、网上银行
毫无疑问,网上银行一定会使用SSL证书来保障数据安全。
2、购物交易类网站
电商网站、支付宝、Paypal等肯定会全程加密以保护你的信息安全。
3、注册与登陆
一些大的网站,比如电子邮箱,注册会员或者登陆的时候,会专门通过SSL通道,保证密码安全不被窃取。
4、政府机构网站
政府机构网站信息数据关系到国家机要,必须进行SSL加密来保障国家信息安全。
5、其他涉及敏感机要信息系统
三、如何获得SSL证书
获得SSL证书需要先合法CA机构如沃通CA进行申请,审核申请材料通过后才签发SSL证书,高级的SSL证书如EV SSL需要付费购买,当然其也提供了免费的SSL证书供大家使用。申请地址http://freessl.wosign.com(免费ssl证书申请步骤)
四、如何部署SSL证书到nginx
编辑配置文件nginx.conf,给站点加上HTTPS协议
server {
server_name YOUR_DOMAINNAME_HERE;
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/33iq.crt;
ssl_certificate_key /usr/local/nginx/conf/33iq_nopass.key;
# 若ssl_certificate_key使用33iq.key,则每次启动Nginx服务器都要求输入key的密码。
}
重启Nginx后即可通过https访问网站了。
四、全站HTTPS还是只针对注册、登陆https加密
既然HTTPS能保证安全,为什么全世界大部分网站都仍旧在使用HTTP呢?使用HTTPS协议,对服务器来说是很大的负载开销。从性能上考虑,我们无法做到对于每个用户的每个访问请求都进行安全加密(当然,Google这种大神除外)。作为一个普通网站,我们所追求的只是在进行交易、密码登陆等操 作时的安全。通过配置Nginx服务器,可以使用rewrite来做到这一点。
在https server下加入如下配置:
if ($uri !~* "/logging.php$")
{
rewrite ^/(.*)$ http://$host/$1 redirect;
}
在http server下加入如下配置:
if ($uri ~* "/logging.php$")
{
rewrite ^/(.*)$ https://$host/$1 redirect;
}
这样一来,用户会且只会在访问logging.php的情况下,才会通过https访问。
更新:有一些开发框架会根据 $_SERVER['HTTPS'] 这个 PHP 变量是否为 on 来判断当前的访问请求是否是使用 https。为此我们需要在 Nginx 配置文件中添加一句来设置这个变量。遇到 https 链接重定向后会自动跳到 http 问题的同学可以参考一下。
server {
...
listen 443;
location \.php$ {
...
include fastcgi_params;
fastcgi_param HTTPS on; # 多加这一句
}
}
server {
...
listen 80;
location \.php$ {
...
include fastcgi_params;
}
}
四、关于访问某些站点提示“该证书不受浏览器信任”
很多站点为了节约成本,使用了自签名SSL证书,自签名SSL证书是不受浏览器信任的。要获取受浏览器信任的证书,则需要到证书授权中心(又叫做CA机构)申请,为每个使用公开密钥的用户发放一个数字证书。浏览器在默认情况下内置了一些CA机构(如wosign CA)的证书,使得这些机构颁发的证书受到信任。