对于Nginx来说,在编译时需要配置对于的SSL库,不管是HTTP3.0还是HTTP2.0,始终都要基于HTTPS,而加密算法这块主要有OpenSSL来提供,而BoringSSL是谷歌创建的OpenSSL分支,用于支持TLS1.3的UDP协议0-RTT数据传输的加密算法(可以理解成TLS 1.3是标准协议,BoringSSL是实现工具),BoringSSL的一些特性会在合适的时机同步给OpenSSl。Nginx从1.25.0开始支持QUIC和HTTP/3协议。此外,从1.25.0开始,Linux二进制包中提供了QUIC和HTTP/3支持

QUIC和HTTP/3支持是实验性的

安装BoringSSL证书

官方推荐了3种SSL库,参考文档https://nginx.org/en/docs/quic.html

我这里使用BoringSSL

  1. 使用 BoringSSL 编译 NGINX,需要满足以下要求:
    gcc 版本大于6
  2. 编译BoringSSL 需要go环境支持
  3. cmake 3版本以上

 

升级cmake:

workon py_env

#yum install ninja-build

pip install -U cmake

 

升级gcc至8:

添加源:

yum install devtoolset-8

激活:source /opt/rh/devtoolset-8/enable

此时通过gcc –version命令可以看到,gcc版本已经变成8.x.x,值得注意的是这仅仅在当前bash生效,如果需要永久生效,可以请自行添加环境变量。

 

golang安装:

wget https://golang.google.cn/dl/go1.21.4.linux-amd64.tar.gz

tar -C /usr/local/ -zxvf go1.21.4.linux-amd64.tar.gz

 

拉取BoringSSL源码

git clone https://github.com/google/boringssl.git

编译BoringSSL

其中在执行cmake -GNinja .. 时,有如下报错:

cmake: Could NOT find Threads (missing: Threads_FOUND) 解决办法

在CMakeLists.txt最上面添加如下语句:

重新编译,即可编译通过。

参考链接: https://github.com/alicevision/geogram/issues/2

Brotli

Brotli是一种通用无损压缩算法,在Nginx模块中和Gzip都是压缩文件的一种方式,不同的是Brotli专为Web设计,对于Web数据压缩效率更高,甚至压缩效果比Gzip更小。Brotli配置和Gzip配置可以共存,无需删除原有的配置

编译安装

服务器使用LNMP作为Web管理后端,所以这里介绍如何修改LNMP的脚本达到一键升级的方法。
首先打开lnmp的主目录,修改如下脚本/path/to/lnmp2.0-full/include/upgrade_nginx.sh

安装依赖:yum install pcre-devel

修改:

注意:

从中间/下面开始是我添加的部分,注意要把脚本里原来带的–with-openssl 参数去掉,需要注意 BoringSSL 的路径,要指向上一步的使用的 boringSSL 路径,prefix修改为编译后nginx二进制链接到的位置,然后保存退出;
使用lnmp脚本运行./upgrade.sh nginx,选择nginx版本时填写1.25.3,等待编译完成。

 

nginx配置:

参数解释

  • listen 443 quic reuseport; #开启quic协议
  • listen 443 ssl; #开启http2协议
  • ssl_certificate ssl/apisix.frps.fun.crt; #证书上传路径
  • ssl_certificate_key ssl/apisix.frps.fun.key;
  • ssl_protocols TLSv1.3; # QUIC requires TLS 1.3 #支持tls协议1.3
  • add_header Alt-Svc ‘h3=”:443″; ma=86400’; #请求头添加quic协议

注意:

  1. 关键配置2个,对于第二行listen 443 quic reuseport;,如果有多个server复用端口选项只需要在任意一个server里面填写就好了。对于第一行,其他的server也需要。
  2. 下面的选项为可选项,默认可以不加,具体可以参考官方文档

http3 on;
http3_hq on;
quic_retry on;
ssl_early_data on;
quic_gso on;

 

nginx.conf:

 

后续配置

检查相关端口号及服务

lsof -i:443

 

Nginx防火墙相关策略需要开启UDP/TCP协议:

-A INPUT -m state –state NEW -m tcp -p tcp –match multiport –dports 80,443 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 443 -j ACCEPT

 

测试:

Chrome 浏览器可以访问 chrome://flags,搜索 quic 开启 QUIC 支持

浏览器启用后,可以通过这个 URL 进行测试,页面上会提示你的浏览器是否可以使用 QUIC

测试自建网站浏览器需要在没有缓存的情况下测试

验证是否开启Brotli

使用命令查看或者在浏览器用Network查看

运行命令:

curl -H ‘Accept-Encoding: br’ -I https://meaninglive.com

Content-Encoding:br 证明内容正确的被Brotli压缩
ETag:W/”63751040-124b” 前面的W代表是服务端压缩,没有就是前端打包压缩

下面是网站安全测试:https://www.ssllabs.com/ssltest/analyze.html

另:我的网站安全是A,不是A+, 需要dns配置CAA解析, 但是注册域名的网站不支持CAA,所以无法配置。具体配置方法可参考如下文章:

https://vpsyx.com/p/lXwm4jW

总结

现有网络环境错综复杂,网站如果使用 HTTP,访问的用户会存在很高的安全隐患,导致信息泄露、木马植入等情况出现。针对这一情况,为互联网提供安全服务而采用 HTTPS 已是大势所趋。HTTP 到 HTTPS 的转向可以帮助提升用户访问安全水平,所以推荐大家也加强个人网站的 SSL 安全等级。

参考:

https://winkkie.com/archives/%E9%87%8D%E6%96%B0%E7%BC%96%E8%AF%91nginx%E5%90%AF%E7%94%A8http3%E5%8D%8F%E8%AE%AE

https://blog.51cto.com/juestnow/4977550

配置 nginx.conf 实现 A+ 等级的 SSL 安全评级 : https://vickey.fun/2022/03/21/enable-https-to-get-A-rating-in-SSLLabs/

网速测试:https://cxlm.work/archives/nginxquictest

 

Categories: MIDDLEWARE

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *