HTTPS介绍
HTTPS(Hyper Text Transfer Protocol Secure)
,是一种基于SSL/TLS
的HTTP
,所有的HTTP
数据都是在SSL/TLS
协议封装之上进行传输的。HTTPS
协议是在HTTP
协议的基础上,添加了SSL/TLS
握手以及数据加密传输,也属于应用层协议。Https
使用的默认端口是443。
目前,应用最广泛的是TLS 1.0,接下来是SSL 3.0。但是,主流浏览器都已经实现了TLS 1.2的支持。
TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。
优点:
- 所有信息都是加密传播,第三方无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
SSL证书
运行过程
SSL/TLS
协议的基本思路是采用公钥加密法,也就是说,客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。
客户端在向获取公钥的时候,有可能出现公钥被劫持的问题,所以就需要使用SSL证书和CA机构。
服务器会给客户端发送SSL证书,浏览器开始查找操作系统中已内置的受信任的证书发布机构CA,进行对比,如果找不到,浏览器就会报错,说明服务器发来的证书是不可信任的。如果找到,那么浏览器就会从操作系统中取出颁发者CA的公钥,然后对服务器发来的证书里面的签名进行解密。
获取SSL证书
下面介绍几个免费的SSL证书提供商:(以下内容非原创)
- CloudFlare SSL:CloudFlare是美国一家提供CDN服务的网站,在世界各地都有自己的CDN服务器节点,国内外很多大型公司或者网站都在使用 CloudFlare的CDN服务(百度云cdn加速在海外用的就是CloudFlare的CDN节点),当然国内站长最常用的就是CloudFlare的免费CDN,加速也很好。CloudFlare提供的免费SSL证书是UniversalSSL,即通用SSL,用户无需向证书发放机构申请和配置证书就可以使用的SSL证书,CloudFlare向所有用户(包括免费用户)提供SSL加密功能,web界面5分钟内就设置好证书,24小时内完成自动部署,为网站的流量提供基于椭圆曲线数字签名算法(ECDSA)的TLS加密服务。
- Wosign沃通SSL:Wosign沃通是国内一家提供SSL证书服务的网站,其免费的SSL证书申请比较简单,在线开通,一个SSL证书只能对应一个域名(单一域名,非通配域名),支持证书状态在线查询协议(OCSP)。
- StartSSL:StartSSL是StartCom公司旗下的SSL证书,提供免费SSL证书服务,且StartSSL被包括Chrome、Firefox、IE 在内的主流浏览器支持,几乎所有的主流浏览器都可以正常识别StartSSL,任何个人都可以从StartSSL中申请到免费一年的SSL证书。
- NameCheap:NameCheap是一家领先的ICANN认可的域名注册和网站托管公司,成立于2000年。该公司提供免费DNS解析,网址转发(可隐藏原URL,支持301重定向)等服务。此外,NameCheap还提供了一年的SSL证书免费服务。
- CloudFlare SSL和Wosign沃通SSL申请开通和安装使用:https://www.freehao123.com/cloudflare-wosign-ssl/
- StartSSL申请:https://www.freehao123.com/startssl-ssl/
- 在Nginx上配置NameCheap免费SSL:http://linux.it.net.cn/CentOS/course/2014/0318/520.html
环境准备
- ubuntu服务器
- 已安装好Nginx
让Nginx支持SSL
1、检查Nginx是否安装SSL模块
sudo /usr/local/nginx/sbin/nginx -V
2、如果没有安装SSL,则需要安装SSL模块
进入Nginx源码目录,执行下面命令:
./configure --with-http_ssl_module
3、重新编译Nginx
sudo make
make
后,在源码根目录的objs
目录中多了一个nginx
程序,就是新编译的nginx
程序。需要覆盖旧的Nginx程序。
sudo make install # 覆盖安装
制作CA证书
需要两个文件:
- SSL证书:.crt
- 私钥文件:.key
1、使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out ca.key 2048
des3算法,2048位强度,ca.key是秘钥文件名.
注意:生成私钥,需要提供一个至少4位的密码。
2、生成CA证书
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
配置Nginx
vi /usr/local/nginx/conf/nginx.conf
配置文件内容:
···
server {
listen 443;
server_name 192.168.241.134;
ssl on;
ssl_certificate /home/fwj/ca.crt;
ssl_certificate_key /home/fwj/ca.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
···
使用下面命令查看配置是否有问题:
vi /usr/local/nginx/sbin/nginx -t
启动Nginx
/usr/local/nginx/sbin/nginx
测试
浏览器访问:https://192.168.241.134
FAQ
提示:nginx: [emerg] PEM_read_bio_X509_AUX("/home/fwj/192.168.241.134.pem") failed (SSL: error:0906D06C:PEM rout
ines:PEM_read_bio:no start line:Expecting: TRUSTED CERTIFICATE)
说明证书配置有问题。