บทนำ
TLS 1.3 เป็นรุ่นของ Transport Layer Security (TLS) โปรโตคอลการตีพิมพ์ในปี 2018 เป็นมาตรฐานที่นำเสนอในRFC 8446 มันมีการปรับปรุงความปลอดภัยและประสิทธิภาพการทำงานมากกว่ารุ่นก่อน
คู่มือนี้อธิบายวิธีการเปิดใช้งาน TLS 1.3 โดยใช้เว็บเซิร์ฟเวอร์ Nginx บน Debian 9
ความต้องการ
- รุ่น Nginx
1.13.0
หรือสูงกว่า
- รุ่น OpenSSL
1.1.1
หรือสูงกว่า
- อินสแตนซ์ Vultr Cloud Compute (VC2) ที่เรียกใช้ Debian 9 x64 (ยืด)
- ชื่อโดเมนที่ถูกต้องและการกำหนดค่าอย่างถูกต้อง
A
/ AAAA
/ CNAME
ระเบียน DNS สำหรับโดเมนของคุณ
- ใบรับรอง TLS ที่ถูกต้อง เราจะได้หนึ่งจาก Let's Encrypt
ก่อนที่จะเริ่ม
ตรวจสอบเวอร์ชั่นของเดเบียน
lsb_release -ds
# Debian GNU/Linux 9.9 (stretch)
ตรวจสอบให้แน่ใจว่าระบบของคุณทันสมัย
apt update && apt upgrade -y
ติดตั้งแพ็คเกจที่จำเป็น
apt install -y git unzip curl sudo socat build-essential
สร้างบัญชีผู้ใช้ที่ไม่ใช่รูทใหม่ด้วยsudo
การเข้าถึงและเปลี่ยนเป็นบัญชี
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
หมายเหตุ: แทนที่johndoe
ด้วยชื่อผู้ใช้ของคุณ
ตั้งค่าเขตเวลา
sudo dpkg-reconfigure tzdata
ติดตั้งไคลเอนต์ Acme.sh และรับใบรับรอง TLS จาก Let's Encrypt
ดาวน์โหลดและติดตั้งAcme.sh
sudo mkdir /etc/letsencrypt
sudo git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
sudo ./acme.sh --install --home /etc/letsencrypt --accountemail [email protected]
cd ~
source ~/.bashrc
ตรวจสอบเวอร์ชั่น
/etc/letsencrypt/acme.sh --version
# v2.8.2
รับใบรับรอง RSA และ ECDSA สำหรับโดเมนของคุณ
# RSA 2048
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength 2048
# ECDSA
sudo /etc/letsencrypt/acme.sh --issue --standalone --home /etc/letsencrypt -d example.com --ocsp-must-staple --keylength ec-256
หมายเหตุ: แทนที่example.com
ด้วยชื่อโดเมนของคุณ
หลังจากเรียกใช้คำสั่งก่อนหน้าใบรับรองและกุญแจของคุณสามารถเข้าถึงได้ในตำแหน่งต่อไปนี้:
- RSA :
/etc/letsencrypt/example.com
- ECC / ECDSA :
/etc/letsencrypt/example.com_ecc
สร้าง Nginx จากแ��ล่งที่มา
Nginx เพิ่มการรองรับ TLS 1.3 ในรุ่น 1.13.0 ใน Linux ดิสทริบิวชันส่วนใหญ่รวมถึง Debian 9 นั้น Nginx ถูกสร้างด้วย OpenSSL เวอร์ชั่นเก่ากว่าซึ่งไม่รองรับ TLS 1.3 ดังนั้นเราต้องสร้าง Nginx ที่กำหนดเองของเราเองซึ่งเชื่อมโยงกับ OpenSSL 1.1.1 รีลีสซึ่งรวมถึงการสนับสนุน TLS 1.3
ดาวน์โหลดเวอร์ชั่นล่าสุดของซอร์สโค้ด Nginx และแตกไฟล์
wget https://nginx.org/download/nginx-1.17.0.tar.gz && tar zxvf nginx-1.17.0.tar.gz
ดาวน์โหลดซอร์สโค้ด OpenSSL 1.1.1c และแตกไฟล์
# OpenSSL version 1.1.1c
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz && tar xzvf openssl-1.1.1c.tar.gz
ลบ.tar.gz
ไฟล์ทั้งหมดเนื่องจากไม่ต้องการอีกต่อไป
rm -rf *.tar.gz
ป้อนไดเรกทอรีต้นทาง Nginx
cd ~/nginx-1.17.0
กำหนดค่าคอมไพล์และติดตั้ง Nginx เพื่อความเรียบง่ายเราจะรวบรวมเฉพาะโมดูลที่จำเป็นที่ TLS 1.3 ใช้งานได้เท่านั้น หากคุณต้องการบิวด์ Nginx ที่สมบูรณ์คุณสามารถอ่านคู่มือ Vultrนี้เกี่ยวกับการคอมไพล์ Nginx
./configure --prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--user=nginx \
--group=nginx \
--build=Debian \
--builddir=nginx-1.17.0 \
--http-log-path=/var/log/nginx/access.log \
--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 \
--with-compat \
--with-http_ssl_module \
--with-http_v2_module \
--with-openssl=../openssl-1.1.1c \
--with-openssl-opt=no-nextprotoneg \
--without-http_rewrite_module \
--without-http_gzip_module
make
sudo make install
สร้างกลุ่มระบบและผู้ใช้ Nginx
sudo adduser --system --home /nonexistent --shell /bin/false --no-create-home --disabled-login --disabled-password --gecos "nginx user" --group nginx
symlink ไป/usr/lib/nginx/modules
/etc/nginx/modules
หลังเป็นสถานที่มาตรฐานสำหรับโมดูล Nginx
sudo ln -s /usr/lib/nginx/modules /etc/nginx/modules
สร้างไดเรกทอรีแคช Nginx และตั้งค่าการอนุญาตที่เหมาะสม
sudo mkdir -p /var/cache/nginx/client_temp /var/cache/nginx/fastcgi_temp /var/cache/nginx/proxy_temp /var/cache/nginx/scgi_temp /var/cache/nginx/uwsgi_temp
sudo chmod 700 /var/cache/nginx/*
sudo chown nginx:root /var/cache/nginx/*
ตรวจสอบเวอร์ชั่น Nginx
sudo nginx -V
# nginx version: nginx/1.17.0 (Debian)
# built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
# built with OpenSSL 1.1.1c 28 May 2019
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx . . .
# . . .
สร้างไฟล์หน่วย Nginx systemd
sudo vim /etc/systemd/system/nginx.service
เติมไฟล์ด้วยการกำหนดค่าต่อไปนี้
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
เริ่มและเปิดใช้งาน Nginx
sudo systemctl start nginx.service
sudo systemctl enable nginx.service
สร้างconf.d
, sites-available
และไดเรกทอรีในsites-enabled
/etc/nginx
sudo mkdir /etc/nginx/{conf.d,sites-available,sites-enabled}
เรียกใช้และเพิ่มต่อไปนี้สองคำสั่งไปยังจุดสิ้นสุดของไฟล์ก่อนที่จะปิดsudo vim /etc/nginx/nginx.conf
}
. . .
. . .
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*.conf;
}
บันทึกไฟล์และออกด้วย:+ +WQ
ตอนนี้เราได้สร้าง Nginx เรียบร้อยแล้วเราก็พร้อมที่จะกำหนดค่าให้เริ่มใช้ TLS 1.3 บนเซิร์ฟเวอร์ของเรา
รันsudo vim /etc/nginx/conf.d/example.com.conf
และเติมไฟล์ด้วยการกำหนดค่าต่อไปนี้
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com/example.com.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.cer;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/example.com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
ssl_prefer_server_ciphers on;
}
บันทึกไฟล์และออกด้วย:+ +WQ
สังเกตเห็นTLSv1.3
พารามิเตอร์ใหม่ของssl_protocols
คำสั่ง พารามิเตอร์นี้จำเป็นต่อการเปิดใช้งาน TLS 1.3
ตรวจสอบการกำหนดค่า
sudo nginx -t
โหลดซ้ำ Nginx
sudo systemctl reload nginx.service
ในการตรวจสอบ TLS 1.3 คุณสามารถใช้เครื่องมือพัฒนาเบราว์เซอร์หรือบริการ SSL Labs ภาพหน้าจอด้านล่างแสดงแท็บความปลอดภัยของ Chrome ที่ระบุว่า TLS 1.3 ทำงานได้
ขอแสดงความยินดี! คุณเปิดใช้งาน TLS 1.3 บนเซิร์ฟเวอร์ Debian 9 สำเร็จแล้ว