前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nginx下配置高性能,高安全性的https TLS服务

nginx下配置高性能,高安全性的https TLS服务

作者头像
byronhe
发布2021-06-25 11:02:05
1.1K0
发布2021-06-25 11:02:05
举报
文章被收录于专栏:Tech ExplorerTech Explorer

下文以nginx为例,介绍如何部署一个高性能,高安全性的https服务器。

并附送一个优化出来的openssl编译脚本,可以编译出一个高性能,高安全性的openssl库,您可以直接复制粘贴使用。

此处直接给出实践指导,后续再写文章解释tls协议的这些原理细节。

nginx下https配置的优化点,主要有:

  1. session ticket
  2. session id cache
  3. ocsp stapling
  4. http KeepAlive
  5. ECDHE等ciphersuite优化
  6. openssl 编译优化

一, nginx https的配置

先贴一下nginx配置,如下。

是根据mozilla的权威文档 ,和生成工具(选择 nginx,intermediate ) 生成的配置为基础,加入session ticket等配置的结果

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

server { listen 443 ssl; # certs sent to the client in SERVER HELLO are concatenated in ssl_certificate ssl_certificate /path/to/signed_cert_plus_intermediates; ssl_certificate_key /path/to/private_key; ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_ticket_key /etc/nginx/conf.d/tls_session_ticket.key; ssl_session_tickets on; keepalive_timeout 75s; # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits ssl_dhparam /path/to/dhparam.pem; # intermediate configuration. tweak to your needs. ssl_protocols TLSv1 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:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; ssl_prefer_server_ciphers on; # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months) add_header Strict-Transport-Security max-age=15768000; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; ## verify chain of trust of OCSP response using Root CA and Intermediate certs ssl_trusted_certificate /path/to/signed_cert_plus_intermediates; resolver 114.114.114.114; .... }

二, 其中的几个配置项

1. /path/to/signed_cert_plus_intermediates

是你的证书链,就是ca签署之后发给你的文件,是一串这样的内容

1 2 3 4 5 6 7 8 9 10

-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- ... -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----

2. /path/to/private_key

是你的私钥,一定要保密,最好chown+chmod限制只有http server可以读取!内容大致是:

1 2 3

-----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----

3. /path/to/dhparam.pem

是dhe密钥协商的参数,生成方法:

代码语言:javascript
复制
     openssl  dhparam -out dhparam.pem 2048
4. /etc/nginx/conf.d/tls_session_ticket.key

是用来加解密session ticket的密码文件,这个文件的安全等级应该和私钥一样,最好chmod+chown限制只有http server能读取。 生成方法:

代码语言:javascript
复制
     openssl rand 48 > tls_session_ticket.key

最好定期(比如2天一次)轮换,配置文件里把新的key文件放在最前面,旧的在下面,如下

代码语言:javascript
复制
    ssl_session_ticket_key current.key;
    ssl_session_ticket_key previous.key;
5. ssl_trusted_certificate /path/to/signed_cert_plus_intermediates

ssl_trusted_certificate,是用来验证ocsp响应的各个ca证书+中级证书,和信任的ca根证书列表。当用来验证ocsp响应的时候,应该配置为你的ca根证书+和中级ca证书的列表,此处可以简单和ssl_certificate使用同一个证书列表文件。 其中当需要使用tls的客户端认证的时候(大多数https server都用不到客户端认证),需要指定信任的ca根证书列表文件, 这个文件在centos里面是/etc/ssl/certs/ca-bundle.trust.crt 这个文件。

配置完成之后,使用ssllabs的这个在线检查工具https://www.ssllabs.com/ssltest/analyze.html 做检查,里面提出的警告,都需要改正。

三, openssl编译优化

主流的https server,都是依赖openssl来提供tls协议,openssl本身代码复杂,概念繁多,最近对这方面做了研究,下面是一个深入分析过后的最优化编译配置,可以编译出一个高性能,高安全性的openssl版本,您可以直接复制粘贴使用。

openssl请使用最新的1.0.2a版本,这个版本有intel针对ecdh p256曲线的优化,编译脚本见本文末尾。

编译好之后,需要让nginx使用我们编译的这个openssl库,在centos下,可以用LD_LIBRARY_PATH的办法:

代码语言:javascript
复制
sudo vim /usr/lib/systemd/system/nginx.service

在其中添加一行Environment,如下:

代码语言:javascript
复制
[Service]
...
Environment=LD_LIBRARY_PATH=/usr/local/bin/openssl-1.0.2a_64_build/lib/
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
...

其中的路径,请自行修改。

还需要创建软连接,解决so库版本号的问题,如下

代码语言:javascript
复制
ln -s libcrypto.so.1.0.0 libcrypto.so.10
ln -s libssl.so.1.0.0 libssl.so.10

脚本中包含了一个cloudflare的patch,增加chacha20_poly1305 cipher,使用了这个patch之后,可以使用cloudflare的ciphers配置

https://github.com/byronhe/modern-crypto-toolbox/blob/master/build_openssl.sh

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一, nginx https的配置
  • 二, 其中的几个配置项
    • 1. /path/to/signed_cert_plus_intermediates
      • 2. /path/to/private_key
        • 3. /path/to/dhparam.pem
          • 4. /etc/nginx/conf.d/tls_session_ticket.key
            • 5. ssl_trusted_certificate /path/to/signed_cert_plus_intermediates
            • 三, openssl编译优化
            相关产品与服务
            专用宿主机
            专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档