Nginx教程3:SSL设置

你好!共享很重要,因此我们很乐意与您共享另一知识。我们使用Nginx教程准备了三部分的系列文章。如果您已经对Nginx有所了解,或者只是想扩展您的经验和了解,这是您的理想之地!YKP码友部落

 

我们将告诉您Nginx的工作原理,背后的概念,如何优化它以提高应用程序的性能或如何设置使其能够运行。YKP码友部落

本教程将分为三个部分:

  • 基础概念 -您将了解指令和上下文,继承模型以及Nginx选择服务器块和位置的顺序之间的区别。
  • 性能 -改善速度的提示和技巧。我们将在这里讨论gzip,缓存,缓冲区和超时。
  • SSL设置 -设置配置以通过HTTPS提供内容。

我们旨在创建一个系列,您可以在其中轻松找到特定主题的正确配置(例如gzip,SSL等),也可以简单地通读它。为了获得最佳的学习体验,我们建议您在自己的计算机上设置 Nginx 并尝试一些实践。YKP码友部落

SSL和TLS

SSL(代表套接字安全层)是一种通过HTTP提供安全连接的协议。YKP码友部落

SSL 1.0由Netscape开发,由于严重的安全漏洞而从未公开发布。SSL 2.0于1995年发布,但存在一些问题,最终导致于1996年发布最终的SSL 3.0。YKP码友部落

TLS(传输层安全性)的第一个版本是作为SSL 3.0的升级而编写的。然后TLS 1.1和1.2出现了。目前,即将到来的TLS 1.3即将推出(这确实值得等待),并且已被某些浏览器支持。YKP码友部落

从技术上讲SSL和TLS是不同的(因为它们各自描述的是协议的不同版本)-但是许多名称可互换使用。YKP码友部落

基本SSL / TLS设置

为了处理HTTPS流量,您需要具有SSL / TLS证书。您可以通过“加密”检查附录以生成免费证书。YKP码友部落

拥有证书后,您可以通过以下方式简单地启用HTTPS:YKP码友部落

  • 开始侦听端口443(键入时浏览器将使用的默认端口https://sample.co
  • 提供证书及其密钥
server {
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;

  ssl_certificate /etc/nginx/ssl/netguru.crt;
  ssl_certificate_key /etc/nginx/ssl/netguru.key;
}

我们还想将配置调整为:YKP码友部落

  • 仅使用TLS协议。由于众所周知的漏洞,不再使用所有SSL版本
  • 使用预定义的安全服务器密码(类似于协议的情况-当时只有少数密码被认为是安全的)

请记住,以上设置总是在变化。不时重访它们是一个好主意。YKP码友部落

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:!MD5;
ssl_prefer_server_ciphers on;

server {
  listen 443 ssl default_server;
  listen [::]:443 ssl default_server;

  ssl_certificate /etc/nginx/ssl/netguru.crt;
  ssl_certificate_key /etc/nginx/ssl/netguru.key;
}

TLS会话恢复

使用HTTPS,在TCP one之上加上TLS握手。在进行实际数据传输之前,这将显着增加时间。假设您/image.jpg要从华沙请求并连接到柏林最近的服务器:YKP码友部落

Open connection

TCP Handshake:
Warsaw  ->------------------ synchronize packet (SYN) ----------------->- Berlin
Warsaw  -<--------- synchronise-acknowledgement packet (SYN-ACK) ------<- Berlin
Warsaw  ->------------------- acknowledgement (ACK) ------------------->- Berlin

TLS Handshake:
Warsaw  ->------------------------ Client Hello  ---------------------->- Berlin
Warsaw  -<------------------ Server Hello + Certificate ---------------<- Berlin
Warsaw  ->---------------------- Change Ciper Spec -------------------->- Berlin
Warsaw  -<---------------------- Change Ciper Spec --------------------<- Berlin

Data transfer:
Warsaw  ->---------------------- /image.jpg --------------------------->- Berlin
Warsaw  -<--------------------- (image data) --------------------------<- Berlin

Close connection

为了节省TLS握手期间的一次往返时间以及生成新密钥的计算成本,我们可以重用在第一个请求期间生成的会话参数。客户端和服务器可以在会话ID密钥后面存储会话参数。在下一次TLS握手期间,客户端可以发送会话ID,并且如果服务器在缓存中仍具有正确的条目,则将重用在上一个会话期间生成的参数。YKP码友部落

server {
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h;
}

OCSP装订

可以随时吊销SSL证书。为了知道给定证书是否不再有效,浏览器需要通过在线证书状态协议(OCSP)进行其他查询。无需要求用户执行给定的OCSP查询,我们可以在TLS握手期间在服务器上进行查询,缓存结果并将OCSP响应提供给客户端。这称为OCSP装订。YKP码友部落

server {
  ssl_stapling on;
  ssl_stapling_verify on;                               # verify OCSP response
  ssl_trusted_certificate /etc/nginx/ssl/lemonfrog.pem; # tell nginx location of all intermediate certificates

  resolver 8.8.8.8 8.8.4.4 valid=86400s;                # resolution of the OCSP responder hostname
  resolver_timeout 5s;
}

安全头

这里有一些标头,值得启用以授予更多安全性。有关更多标题和详细信息,您绝对应该检查OWASP安全标题项目。YKP码友部落

HTTP严格传输安全

简而言之,HSTS会强制用户代理通过HTTPS将所有请求发送到源。YKP码友部落

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

X框架选项

指示浏览器是否应呈现frame, iframe 或 object标记中的页面。YKP码友部落

add_header X-Frame-Options DENY;

X内容类型选项

这将防止浏览器嗅探文件以推断文件类型。该文件将被解释为Content-Type标头中声明的内容 YKP码友部落

add_header X-Content-Type-Options nosniff;

服务器令牌

另一个好的做法是在HTTP响应标头字段中隐藏有关Web服务器的信息:YKP码友部落

Server : nginx/1.13.2

这可以通过禁用server_tokens指令来实现YKP码友部落

server_tokens off;

附录::加密

安装

最新的可以在这里找到。YKP码友部落

为了进行测试,请使用暂存环境,而不要限制排气速率。YKP码友部落

生成新证书

certbot certonly --webroot --webroot-path /var/www/netguru/current/public/  
          -d foo.netguru.co 
          -d bar.netguru.co

确保可以正确更新YKP码友部落

certbot renew --dry-run

确保已将自动续订添加到crontab。运行crontab -e 并添加以下行YKP码友部落

0 3 * * * /usr/bin/certbot renew --quiet --renew-hook "/usr/sbin/nginx -s reload"

通过ssllabs检查SSL是否正常工作YKP码友部落

概要

感谢您的阅读。如果没有互联网深层的大量资源,就不可能实现该系列。YKP码友部落


我们将非常感谢您的反馈和意见,请随时讨论!你喜欢这个系列吗?您有什么建议接下来应该解决什么主题?还是您发现了一个错误?让我们知道,下次再见!YKP码友部落