X25519 已经标准化了,Chrome 50 开始支持 X25519 for TLS 了,正好 OpenSSL 1.1.0 也开始支持 X25519 了。本文将演示如何在 macOS 下安装 OpenSSL 1.1.0, 并配置 nginx 使用 X25519, 作为 OpenSSL 1.1.0 的另一福利:Chacha20-Poly1305, 将一并演示如何在 nginx 中选择 Chacha20-Poly1305 作为 ssl_cipher.

  • UPDATE

给 homebrew 提了一个 pull request, 因此只要运行

1
brew install nginx --devel

安装的版本就自动带 OpenSSL 1.1.0 了。下面的内容只作为存档使用。

  1. 安装 openssl 1.1.0

    1
    brew install openssl@1.1
  2. 修改 nginx receipt

    1
    brew edit nginx

编辑 43 行的 openssl = Formula["openssl"]openssl = Formula["openssl@1.1"]

  1. 安装 nginx

    1
    brew install --build-from-source --devel nginx
  2. 在站点配置中使用下面的 SSL Directives

    1
    2
    3
    ssl_ciphers CHACHA20:AES128:AES256:GCM:!DH:!RC4:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
    ssl_prefer_server_ciphers on;
    ssl_ecdh_curve X25519;
  3. 重启 nginx 使配置生效

    1
    nginx -s reload

如果你在中国大陆的网络环境内无法安装,请检查是否已经解决 DNS 污染的问题。

本文在打字中参考了在HTTPS加密连接中使用CHACHA20-POLY1305加密方法一文,在此感谢作者对使用 CHACHA20-POLY1305 的探讨。