Skip to main content

啟用Nginx 支援到 OpenSSL TLS1.3 安全協定 - CentOS

BUBU 因為之前測試的安裝方式都是不能啟用 TLS 1.3 的模式,因為又在重新尋找其他的方式,那之前測試的方式是都是失敗,可以試試下面的方式我在網路上找到其方的方式來處理的,首先先到 OpensSSL 官方下載最新版的本目前是到 OpenSSL 1.1.1b 版本未來還會在有更高的版,到再請在下載新的版本。

Nginx 官方下載 yum 版本,目前的版次


先在 vim /etc/yum.repos.d/nginx.repo 上新增下載路徑

#這是目前穩定的版本(1.16.X)

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

#這是開發本版(1.17.X)

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • CentOS 7
先安裝可以選擇指定的 yum 的套件
yum install yum-utils -y

指定要安裝的套件,這樣子就不會去選擇內鍵的路徑
yum-config-manager --enable nginx-mainline

接下來就可以開始安裝 Nginx 服務
yum install nginx -y

啟動及自動啟動服務
systemctl start nginx ; systemctl enable nginx
  • CentOS 8 \ Rocky Linux 8 \ Rocky Linux 9
先安裝可以選擇指定的 yum 的套件
dnf install dnf-utils -y

指定要安裝的套件,這樣子就不會去選擇內鍵的路徑
yum-config-manager --enable nginx-mainline

接下來就可以開始安裝 Nginx 服務
dnf install nginx -y

啟動及自動啟動服務
systemctl start nginx ; systemctl enable nginx

準備來編譯 Nginx 服務,以下是需要依賴的套件,要先下載


  • CentOS 7
yum install -y git gcc gcc-c++ clang automake make autoconf libtool zlib-devel libatomic_ops-devel pcre-devel openssl-devel libxml2-devel libxslt-devel gd-devel GeoIP-devel gperftools-devel perl-devel perl-ExtUtils-Embed
  • CentOS 8
dnf install dnf-utils -y
dnf config-manager --set-enabled PowerTools
dnf install -y git gcc gcc-c++ clang automake make autoconf libtool zlib-devel libatomic_ops-devel pcre-devel openssl-devel libxml2-devel libxslt-devel gd-devel GeoIP-devel gperftools-devel perl-devel perl-ExtUtils-Embed

Brotli 安裝


cd ~
git clone https://github.com/google/ngx_brotli.git
cd ngx_brotli
git submodule update --init --recursive

下載 Github 上面的 Nginx 、 OpenSSL 、 Nginx-ct 這三個套件


  • 2019.06.15 OpenSSL 有釋放出新版 openssl-1.1.1c
  • 2019.09.10 OpenSSL 有釋放出新版 openssl-1.1.1d
  • 2020.03.31 OpenSSL 有釋放出新版 openssl-1.1.1f
  • 2020.04.21 OpenSSL 有釋放出新版 openssl-1.1.1g
  • 2020.12.08 OpenSSL 有釋放出新版 openssl-1.1.1i
  • 2021.08.24 OpenSSL 有釋放出新版 openssl-1.1.1l
  • 2023.02.07 OpenSSL 有釋放出新版 openssl-1.1.1t

新主線的 OpenSSL

git clone https://github.com/nginx/nginx.git
git clone https://github.com/openssl/openssl.git (會是安裝當時的測試版本,建議去官方下載正式的版本當時版次是 OpenSSL-1.1.1b 這是正式版的)

wget https://www.openssl.org/source/openssl-1.1.1l.tar.gz
解壓
tar -zxvf openssl-1.1.1t.tar.gz
修改名稱
mv openssl-1.1.1t openssl

git clone https://github.com/grahamedgecombe/nginx-ct.git
  • nginx-ct是啟用証書透明度(Certificate Transparency)策略的模組。為了啟用 Certificate Transparency和TLSv1.3,需要額外加入如下編譯參數

備註:這一段是在說怎麼把模組掛到系統裡面不是直接下指令用的

--add-module=../nginx-ct/ --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3
  • 加在官方編譯參數後面,簡單修改編譯參數
auto/configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=../nginx-ct/ --with-openssl=../openssl/ --with-openssl-opt=enable-tls1_3 --add-module=../ngx_brotli/
  • 進入 Nginx 目錄裡面,輸入上面所要編譯參數,就會自行編譯
  • 編譯完之後請在輸入 make 指令
  • 查看編譯完成的 Nginx 的版次
./objs/nginx -v

nginx version: nginx/1.XX.XX
  • 備份剛剛安裝好的 Nginx 版本,改成編譯版本
之前目錄改修當時日期
mv /usr/sbin/nginx /usr/sbin/nginx.20190309.official.mainline

將編譯的版本複製剛剛備份的目錄
cp ./objs/nginx /usr/sbin/

修改 Nginx 設定檔內的 ssl_protocolsssl_ciphers 啟用 TLSv1.3


....
ssl_protocols          TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; #可以考慮將 TLSv1 刪除掉不這是安全性很舊了只支援很舊的瀏灠器。
ssl_ciphers            TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:ECDHE+aECDSA+CHACHA20:ECDHE+aRSA+CHACHA20:ECDHE+aECDSA+AESGCM:ECDHE+aRSA+AESGCM:ECDHE+aECDSA+AES256+SHA384:ECDHE+aRSA+AES256+SHA384:ECDHE+aECDSA+AES256+SHA:ECDHE+aRSA+AES256+SHA;
....
  • 重新啟 Nginx 服務,讓剛剛修改設定檔生效
systemctl restart nginx

測試 TLSv1.3 版本是否有生效


  • 使用 testssl 工具,在使用這個工具之前要先下載依賴的套件
yum install bind-utils -y
  • 如果沒有下載此套件的話會出現以下的誤錯訊息

Fatal error: Neither "dig", "host", "drill" or "nslookup" is present

  • 載點如下
git clone --depth 1 https://github.com/drwetter/testssl.sh.git
cd testssl.sh
./testssl.sh --help
  • 下命令輸入想要測試的網域
./testssl.sh -p 1234.com
  • 執行完結果如下

image-1552114862664.png

  • 詳細的狀況將小寫的 -p 改成大寫的 -P,測試完結果如下

image-1552115074868.png




參考相關網頁