云网牛站
所在位置:首页 > Linux云服务器 > HTTPS加密简介以及Nginx安装Let’s Encrypt免费SSL/TLS证书

HTTPS加密简介以及Nginx安装Let’s Encrypt免费SSL/TLS证书

2017-12-12 16:11:04作者:linux大神稿源:linuxdashen

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端口。

HTTPS加密简介以及Nginx安装Let’s Encrypt免费SSL/TLS证书

我们需要暂时停止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到最新版本。

 

相关主题

Ubuntu 16.04安装配置Nginx使用Let‘s Encrypt

精选文章
热门文章