HTTPS简介 专业术语 围绕着HTTPS加密有许多专业术语,下面几个只是冰山一角,但它们是最基本的。 SSL:Secure Socket Layer. SSL是传输层TCP加密的一种协议。SSL1.0版本于1993年左右由网景公司(NetScape)发明。由于第一版有许多安全漏洞,所以它从未面世。SSL经历版本:SSL1.0,SSL2.0,SSL3.0...。 TLS: Transport Layer Security. TLS是SSL的升级版。TLS现在基本替代了SSL,有版本:TLS1.0,TLS1.1,TLS1.2...。 X.509: 它是TLS证书的格式 PKI:Public Key Infrastrcture 公钥基础设施 CA: Cerfificate Authority, 证书签发机构。PKI中向网站服务器,邮箱服务器等签发SSL/TLS证书的机构。CA有两种类型:Root CA和中间CA。 人们有时会说SSL证书,有时会说TLS证书,也有人说SSL/TLS证书。其实他们指的是同一种证书,只是叫法不同而已。
加密的重要性 很多人认为只是在处理网上金融业务或者在登录时需要用到加密,但加密的用处绝不仅仅是这两个。加密是保护人们的网上隐私的重要手段。它还能帮助我们抵御其他形式的攻击。明文的HTTP不能保护服务器和浏览器之前的通信,是非常不安全的。
为什么需要加密? 加密技术为人们的网上活动提供了保密性、完整性和真实性。具体地是指: 1.保密性:保护人们的网上活动不受劫持,地理位置跟踪的威胁。防止其他人通过非正常手段了解用户的网上浏览记录。 2.完整性:保护资料在网络传输过程中的完整性,不受中间人修改。 3.真实性:帮助人们了解对方身份的真实性
Poodle攻击 2014年10月谷歌发现了一种新的攻击方法,叫做Poodle,全称为Padding Oracle On Downgraded Legacy Encryption。Poodle通过将浏览器和服务器之前的加密协议从TLS降低为SSL3.0,从而利用SSL3.0的漏洞进行攻击。所以自此以后,SSL3.0加密被认为是过时的技术。
服务器获取证书的困难和障碍 站长通常会认为HTTPS会拖慢网站的加载速度,并且对服务器的CPU有一定要求。很多人都感觉到获取一个SSL/TLS证书要花费时间和金钱。需要了解Cipher Suite以及OpenSSL命令行的用法,对于大多数人来说这相当困惑。而且当证书到期时,站长又得重新申请一次,不然用户浏览网站时,会被浏览器告知网站不安全。
Let’s Encrypt 项目 Let’s Encrypt (我们来加密吧)是一个由电子前哨基金会、Mozilla基金会、Akamai、密歇根大学、思科联合发起的一个项目。它旨在为站长提供一个免费的、完全自动化的证书申请过程,从而让整个互联网都能享受到HTTPS加密。Let’s Encrypt的证书申请过程非常简单、安全、快速、自动化并且免费。Let’s Encrypt是一个中间CA,它的CA证书由IdenTrust签发。IdenTrust是一个Root CA,受到所有主流浏览器的信任。Let’s Encrypt的中间CA证书被chrome、Firefox、Microsoft Edge、Safari和Opera所信任。
Let’s Encrypt 的概念 DV: Domain Validation 域名验证。它用来验证SSL/TLS证书的申请人拥有域名的控制权。这个过程可以完全自动化,由机器完成,不需要人的介入。 DVSNI:用来证明申请人对服务器拥有控制权。 ACME:Automated Certificate Management Environment 自动化证书管理环境。它是申请人服务器和Let’s Encrypt CA服务器之前的通信协议。
Let’s Encrypt 证书的安全性 它支持对网站服务器(Apache、Nginx)自动配置SSL/TLS,并且在此过程中会自动备份原来的配置文件。到目前为止,自动配置只支持Apache,Nginx的支持工作还在进行。 Let’s Encrypt可以防止申请人对同一个域名进行两次申请。
单一模式 当网站服务器(web server)没有自动配置时,要使用单一模式。在单一模式下,证书和钥匙保存在文件系统,然后管理员手动进行服务器的SSL/TLS配置。 多域名证书和通配型证书(multi-domain cert & wildcard cert) Let’s Encrypt目前支持多域名证书。在申请的时候你可以输入你拥有的多个域名,最多只能输入100个域名。
为Nginx服务器安装一个免费的 Let’s Encrypt 证书 最有趣的时候到了,为Nginx安装证书! 首先在Linux服务器上安装Git: Debian/Ubuntu: sudo apt-get install git CentOS: sudo yum install git Arch Linux: sudo pacman -S git 然后,克隆Let’s Encrypt的Github repository git clone https://github.com/letsencrypt/letsencrypt cd letsencrypt 输入下面的命令获取SSL证书。certonly是指只获取SSL证书,但不安装证书,因为目前Let’s Encrypt还处于beta阶段,自动SSL配置还不支持Nginx,我们得手动配置SSL证书。–agree-tos是指同意服务条款(terms of service)。 ./letsencrypt-auto --agree-tos certonly 这条命令会要求你输入一个邮箱地址,然后输入你的域名。邮箱地址是用来接收紧急通知和找回密钥的。 因为Let’s Encrypt支持多域名证书,所以你可以输入多个域名,但不能超过100个。注意你输入的域名的IP地址必须要指向你现在的服务器。Let’s Encrypt会通过DNS验证你的域名是否与你的服务器IP对应。输入的第一个域名是Common Name,然后全部域名都会出现在Alternative Name栏目下。 你可能会看见如下错误,提示nginx进程已经在监听80端口。
我们需要暂时停止nginx,然后再次运行一次上面的命令。 sudo service nginx stop or sudo systemctl stop nginx ./letsencrypt-auto --agree-tos certonly 如果出现下面的错误,只需要重新执行letsencrypt-auto命令。 Failed authorization procedure.(tls-sni-01): urn:acme:error:tls :: The server experienced a TLS error during DV :: Failed to connect to host for DVSNI challenge 当命令完成时,你会看到如下消息,表示你已经成功申请到了证书。证书和密钥都保存在/etc/letsencrypt/live/yourdomain目录下。 IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/yourdomain.com/fullchain.pem. Your cert will expire on 2017. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - If like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le 然后,启动nginx进程 sudo service nginx start or sudo systemctl start nginx 配置/etc/nginx/sites-available/yourdomain.com 或者 /etc/nginx/conf.d/yourdomain.conf文件,将文件内容修改成如下形式。 server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://www.yourdomain.com$request_uri; } server { listen 443 ssl spdy; server_name www.yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.1 TLSv1.2; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK'; ssl_prefer_server_ciphers on; root /path/of/the/web/root; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php?$query_string; } ........ 然后,重新加载nginx配置 sudo service nginx reload or sudo systemctl reload nginx 现在浏览你的网站,浏览器地址栏会有一把绿色的锁。如果你想测试网站的加密强度,可以前往 ssl lab 测试。 如果你的nginx版本很低,那么你的nginx可能不能完全支持上面所给的配置。最好的办法是升级Nginx到最新版本。
相关主题 |