Nginx部署中HTTPS加密和加密的概述

HTTPS加密概述

首字母缩略词

加密有很多首字母缩写词。 下面只是冰山一角。 这些是基本原理。

  • SSL协议:安全套接字层。 它是用作TCP之上的安全层的旧协议。 由Netscape最初开发,第一个版本SSL1.0于1993年左右发明。SSL具有三个版本:SSL1,SSL2,SSL3。
  • TLS:传输层安全性。 TLS取代了SSL。 TLS还具有三个版本:TLS1.0,TLS1.1和TLS1.2。 越新越好。
  • X.509:TLS证书使用的格式。
  • 公钥基础设施:公钥基础结构。
  • 认证机构: 证书颁发机构。 这是PKI中颁发证书的实体。 CA有两种类型:根CA和中级CA。 让我们加密是一个中间CA。

人们经常说SSL证书和TLS互换认证。 但是大多数加密使用TLS协议而不是SSL,因为后者不再是安全协议。

加密的重要性

许多人认为,仅在进行网上银行交易或保护登录凭据时才需要加密。 除此之外,还有更多。 对于重视在线隐私的人们来说,加密确实是一项基本技术。 它还可以保护我们免受各种形式的攻击。 纯HTTP绝不旨在保护服务器和Web浏览器之间的通信。 这是完全不安全的。

为什么需要加密?

TLS加密提供了CIA,代表着机密性,完整性和真实性。 进一步来说:

  • 保密:防止劫持和位置跟踪。 其他人看不到您在线上查看的内容。 如果发现中国人观看“非法内容”,他们可能会被禁止使用互联网! 2015年11月,中国新疆省的一些人使用VPN来访问Instagram,电报,WhatsApp,其移动服务被警察暂停!
  • 廉洁:请安全地下载软件,并防止中间人攻击修改您的下载软件。
  • 真实性:知道发送数据的人是您信任的人。

以及许多其他特定情况…

最近的贵宾犬袭击

SSL3在2014年10月的Poodle攻击后已过时。Poodle代表Padding Oracle On Downgradeed Legacy Encryption。 它能够将客户端和服务器之间的加密降级为SSL3,并利用SSL3的漏洞。

获得证书的障碍

网站管理员认为HTTPS会减慢网站速度,并对服务器的CPU提出很多要求。 许多人说这很昂贵(财务成本和时间成本),乏味且难以获得和维护证书。 网站管理员必须选择要使用的密码套件,但这对大多数人来说非常令人困惑。 当证书过期且网站管理员忘记续订时,用户将收到警告。

让我们加密项目

让我们加密是一个由电子前沿基金会,Mozilla,Akamai,密歇根大学和思科支持的项目。 这是一个完全免费的自动化证书颁发机构,旨在对整个网络进行加密。 这是一种简单,安全,快速且免费的方式,可自动完成有关SSL / TLS证书的所有操作,包括获取,安装和更新证书。 让我们加密是由IdenTrust交叉签名的中间CA,该IdenTrust是受主流浏览器信任的RootCA。 自2015年10月起,主流浏览器,Google Chrome,Mozilla Firefox,Microsoft Edge,Safari,Opera将立即信任Let’s Encrypt。

让我们加密概念

数码相机:域验证。 CA确认申请人控制了域。 该验证过程可以完全自动化。 它可以由机器执行,不需要人工干预。

DVNI:证明可以控制Web服务器。

ACME:自动化证书管理环境。 它是申请人的Web服务器和“让我们加密CA”服务器之间使用的协议。

安全

自动配置可提供Web服务器配置的bakcup副本。 在撰写本文时,Apache是​​唯一可以由let-encrypt客户端自动配置的Web服务器。

让我们加密可以防止申请人为同一域应用两个证书。

独立模式

自动配置不支持您的Web服务器(例如Nginx)时,使用独立模式。 在独立模式下,证书和密钥存储在文件系统上,然后您需要配置Web服务器以找到证书和密钥。

通配符和多域证书

Let’s Encrypt现在支持多域证书,并且效果很好。 应用证书时,您只需要输入所有域名,Let’s Encrypt CA就会验证所有域。 通配符是一个更困难的情况。 目前,Let’s Encrypt不提供支持。

有趣的部分:在Nginx服务器上安装Let’s Encrypt证书

首先在Linux服务器上安装Git:

Debain/Ubuntu: sudo apt-get install git

CentOS: sudo yum install git

Arch Linux: sudo pacman -S git

接下来,克隆Let’s Encrypt github存储库。

git clone https://github.com/letsencrypt/letsencrypt

cd letsencrypt

在撰写本文时,Let’s Encrypt仍处于测试阶段,不支持Nginx的自动配置。 –agree-tos表示同意服务条款。 certonly表示获取SSL证书,但不会自动安装SSL证书,因为我们必须手动安装它。

./letsencrypt-auto --agree-tos certonly

然后它将询问您的电子邮件地址。 然后输入您的域。 该电子邮件地址用于紧急通知和丢失的密钥恢复。

Selection_253

由于“让我们加密”支持多域证书,因此您最多可以输入100个域名。 但是请注意,您输入的域名都应指向服务器的IP。 让我们加密将通过DNS进行验证。 第一个域名将是通用名称,所有域名将是替代名称。

然后,您将看到以下说法:nginx已经在端口80上侦听。

Selection_251

因此,您需要暂时停止Nginx并再次执行该命令。

sudo service nginx stop    or     sudo systemctl stop nginx

./letsencrypt-auto --agree-tos certonly

如果遇到诸如以下错误,请重新发出上述命令。

Failed authorization procedure. www.linuxdashen.com (tls-sni-01): urn:acme:error:tls :: The server experienced a TLS error during DV :: Failed to connect to host for DVSNI challenge

命令完成后,您将看到以下消息。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/yourdomain.com/fullchain.pem. Your cert will
 expire on 2016-03-06. 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
IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
 e-mails sent to [email protected]
 - Your account credentials have been saved in your Let's Encrypt
 configuration directory at /etc/letsencrypt. You should make a
 secure backup of this folder now. This configuration directory will
 also contain certificates and private keys obtained by Let's
 Encrypt so making regular backups of this folder is ideal.

现在启动Nginx

sudo service nginx start        or         sudo systemctl start nginx

更改您的Nignx配置,使其类似于以下内容:

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

现在访问您的网站,您应该会看到一个greenlock。

Selection_254

如果您的网页上有指向未启用https的指向其他网站的链接,则您将看到一个带有黄色三角形的白锁。

Selection_255

如果您使用的是较旧的Nginx版本(例如nginx 1.4.x),则上述Nginx配置可能对您不起作用。 您可以查看我的文章如何在Ubuntu服务器上安装Nginx主线分支以安装最新的Nginx版本。

您的钥匙和证书在哪里?

您所有的密钥和证书都位于 /etc/letsencrypt/live/yourdomain.com。 您应该将它们备份在安全的地方。

如果服务器崩溃并丢失了所有密钥,那么在这种情况下,您需要转到现有的证书颁发机构之一,请向他们支付钱以获取证书以证明可以加密我们。 现有的CA充当回退机制。

我们即将结束。

加密强度测试

访问SSL实验室以测试您的加密强度。

Sidebar