http://www.linuxidc.com/Linux/2013-08/88271.htmphp
1、什么是 SSL 证书,什么是 HTTPS
SSL 证书是一种数字证书,它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间创建一条安全通道,从而实现:
一、数据信息在客户端和服务器之间的加密传输,保证双方传递信息的安全性,不可被第三方窃听;
二、用户能够经过服务器证书验证他所访问的网站是否真实可靠。html
HTTPS 是以安全为目标的 HTTP 通道,即 HTTP 下加入 SSL 加密层。HTTPS 不一样于 HTTP 的端口,HTTP默认端口为80,HTTPS默认端口为443。linux
推荐阅读:nginx
基于OpenSSL实现C/S架构中的HTTPS会话 http://www.linuxidc.com/Linux/2013-05/84477.htmapi
RHEL6.3下配置简单Apache HTTPS http://www.linuxidc.com/Linux/2013-02/78874.htm浏览器
Nginx搭建HTTPS服务器 http://www.linuxidc.com/Linux/2013-01/78263.htm安全
Linux实现HTTPS方式访问站点 http://www.linuxidc.com/Linux/2012-08/69429.htmbash
2、什么网站须要使用SSL证书
一、购物交易类网站
不用多说,网上银行、支付宝、Paypal等确定会全程加密以保护你的信息安全。服务器
二、注册与登录
一些大的网站,好比电子邮箱,注册会员或者登录的时候,会专门经过SSL通道,保证密码安全不被窃取。架构
三、某些在线代理
这个。。。嗯哼,就不说了。
四、装B
好比我……
3、自行颁发不受浏览器信任的SSL证书
为晒晒IQ网颁发证书。ssh登录到服务器上,终端输入如下命令,使用openssl生成RSA密钥及证书。
# 生成一个RSA密钥 $ openssl genrsa -des3 -out 33iq.key 1024 # 拷贝一个不须要输入密码的密钥文件 $ openssl rsa -in 33iq.key -out 33iq_nopass.key # 生成一个证书请求 $ openssl req -new -key 33iq.key -out 33iq.csr # 本身签发证书 $ openssl x509 -req -days 365 -in 33iq.csr -signkey 33iq.key -out 33iq.crt
第3个命令是生成证书请求,会提示输入省份、城市、域名信息等,重要的是,email必定要是你的域名后缀的。这样就有一个 csr 文件了,提交给 ssl 提供商的时候就是这个 csr 文件。固然我这里并无向证书提供商申请,而是在第4步本身签发了证书。
编辑配置文件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访问网站了。
自行颁发的SSL证书可以实现加密传输功能,但浏览器并不信任,会出现如下提示:
4、受浏览器信任的证书
要获取受浏览器信任的证书,则须要到证书提供商处申请。证书授证中心,又叫作CA机构,为每一个使用公开密钥的用户发放一个数字证书。浏览器在默认状况下内置了一些CA机构的证书,使得这些机构颁发的证书受到信任。VeriSign便是一个著名的国外CA机构,工行、建行、招行、支付宝、财付通等网站均使用VeriSign的证书,而网易邮箱等非金融网站采用的是中国互联网信息中心 CNNIC颁发的SSL证书。通常来讲,一个证书的价格不菲,以VeriSign的证书为例,价格在每一年8000元人民币左右。
听说也有免费的证书能够申请。和VeriSign同样,StartSSL也 是一家CA机构,它的根证书好久以前就被一些具备开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。后 来StartSSL居然搞定了微软:在升级补丁中,微软更新了经过Windows根证书认证(Windows Root Certificate Program)的厂商清单,并首次将StartCom公司列入了该认证清单。如今,在Windows 7或安装了升级补丁的Windows Vista或Windows XP操做系统中,系统会彻底信任由StartCom这类免费数字认证机构认证的数字证书,从而使StartSSL也获得了IE浏览器的支持。(来源及申请步骤)
5、只针对注册、登录进行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;
}
}
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容请看SSL。
它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL代表它使用了HTTP,但HTTPS存在不一样于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通信方法,如今它被普遍用于万维网上安全敏感的通信,例如交易支付方面。
一、自行颁发不受浏览器信任的SSL证书:
HTTPS的SSL证书能够自行颁发,Linux下的颁发步骤以下:
Nginx.conf的SSL证书配置,使用api.bz_nopass.key,在启动Nginx是无需输入SSL证书密码,而使用api.bz.key则须要输入密码:
自行颁发的SSL证书虽然可以实现加密传输功能,但得不到浏览器的信任,会出现如下提示:
二、受浏览器信任的StartSSL免费SSL证书:
跟VeriSign同样,StartSSL(网址:http://www.startssl.com,公司名:StartCom)也是一家CA机构,它的根证书好久以前就被一些具备开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。
在今年9月份,StartSSL居然搞定了微软:微软在升级补丁中,更新了经过Windows根证书认证程序(Windows Root Certificate Program)的厂商清单,并首次将StartCom公司列入了该认证清单,这是微软首次将提供免费数字验证技术的厂商加入根证书认证列表中。如今,在Windows 7或安装了升级补丁的Windows Vista或Windows XP操做系统中,系统会彻底信任由StartCom这类免费数字认证机构认证的数字证书,从而使StartSSL也获得了IE浏览器的支持。
注册成为StartSSL(http://www.startssl.com)用户,并经过邮件验证后,就能够申请免费的可信任的SSL证书了。步骤比较复杂,就不详细介绍了,申请向导的主要步骤以下:
三、使用案例:
使用StartSSL免费SSL证书的HTTPS(SSL)网站示例:
https://sms.api.bz
四、小插曲:
StartSSL虽然提供的是免费的SSL证书,但服务态度是很是不错的。以前StartSSL并不支持.bz结尾的域名,由于我有一个api.bz域名须要SSL证书,因此我发了份邮件给StartSSL的管理员,要求增长.bz域名,中间还由于.bz域名注册机构对whois查询有限制,出现了一些比较麻烦的问题,最终StartSSL经过修改程序,支持了.bz域名。