Score:1

TLS 1.3 ไม่ทำงานบน nginx 1.21 พร้อม opensl 1.1.1n

ธง us

ฉันมี nginx (1.21.6) ที่ทำงานด้วย opensl 1.1.1n บนเซิร์ฟเวอร์ Debian 11 แม้ว่าฉันจะทำตามบทช่วยสอนมากมายและดูคำถามหลายข้อในฟอรัมนี้เกี่ยวกับหัวข้อนี้ แต่ฉันไม่สามารถใช้งาน TLS 1.3 ได้ ผลลัพธ์ของ nginx -V:

รุ่น nginx: nginx/1.21.6
สร้างโดย gcc 10.2.1 20210110 (Debian 10.2.1-6)
สร้างด้วย OpenSSL 1.1.1k 25 มี.ค. 2564 (ทำงานด้วย OpenSSL 1.1.1n 15 มี.ค. 2565)
เปิดใช้งานการสนับสนุน TLS SNI

ฉันอัปเกรด nginx เป็นเวอร์ชัน mainline เนื่องจากฉันไม่สามารถให้ TLS 1.3 ทำงานในเวอร์ชันก่อนหน้าได้เช่นกัน มันแปลกมาก... Opensl รองรับ TLS 1.3 อย่างแน่นอน ฉันทดสอบผ่าน openssl s_client -tls1_3 -เชื่อมต่อ www.cloudflare.com:443 ซึ่งทำงานได้ดี นี่ของฉัน ssl.conf ไฟล์ nginx ที่ฉันรวมไว้ในแต่ละเซิร์ฟเวอร์ nginx ของฉัน (ใบรับรองจะรวมอยู่ในส่วนเซิร์ฟเวอร์แยกต่างหาก):

ssl_session_timeout 1d;
ssl_session_cache ที่ใช้ร่วมกัน: SSL:10m; # ประมาณ 40,000 ครั้ง
ปิด ssl_session_tickets;

เปิด ssl_stapling;
#ssl_trusted_certificate /pfad/bundle.ca.pem;
เปิด ssl_stapling_verify;

ssl_dhparam /etc/nginx/dhparams.pem;

ssl_ecdh_curve X448:secp521r1:secp384r1;


ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256:TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES -128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA -CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
เปิด ssl_prefer_server_ciphers;

# HSTS (ต้องมี ngx_http_headers_module) (63072000 วินาที)
add_header Strict-Transport-Security "max-age=31536000;preload;includeSubDomains" เสมอ

เดอะ Qualys ssltest ของเว็บไซต์ของฉัน ไม่ได้แสดงว่าฉันใช้ TLS 1.3 บนเซิร์ฟเวอร์ของฉัน นอกจากนี้ เบราว์เซอร์ Chrome ยังแสดงว่าเชื่อมต่อผ่าน TLS 1.2 แม้ว่าฉันจะลบ TLSv1.2 คำสั่งจากฉัน ssl.conf และจากไปเท่านั้น TLSv1.3มันยังเชื่อมต่อผ่าน TLS 1.2

ไม่มีที่ไหนอีกแล้วก ssl_โปรโตคอลคำสั่งในไฟล์กำหนดค่าอื่น ๆ ของ nginx ฉันตรวจสอบผ่านทาง nginx -T.

หมดไอเดียจริงๆ..... ใครสามารถช่วยฉันได้บ้าง

แก้ไข: อย่างใด nginx ดูเหมือนจะไม่ตอบสนองต่อ ssl_โปรโตคอล และ ssl_ecdh_curve กำกับอย่างถูกต้อง เช่น เมื่อฉันลบไฟล์ ssl_ciphers จากการกำหนดค่าของฉัน (ตามที่ @drookie แนะนำในความคิดเห็นของเขา) เซิร์ฟเวอร์ของฉันรองรับ TLS 1.0 และ TLS 1.1 แม้ว่าฉันจะตั้งค่า ssl_protocols TLSv1.3 TLSv1.2;. ในทำนองเดียวกันตาม ทดสอบคุณภาพ, secp256r1 ได้รับการสนับสนุน แม้ว่าฉันจะไม่มีเส้นโค้งนี้ในการกำหนดค่าของฉัน ssl_ecdh_curve (ก็ไม่เช่นกัน ไพรม์256v1). สำหรับฉันแล้วดูเหมือนว่ามีบางอย่างเขียนทับการตั้งค่าของฉันใน ssl.conf ไฟล์. ฉันใช้ acme.sh เพื่อรับใบรับรอง grep -R 'ssl_protocol' /etc/* ให้ไลน์เข้ามาเท่านั้น ssl.conf กับ ssl_protocols TLSv1.3 TLSv1.2;. ฉันไม่รู้ว่าอะไรเป็นสาเหตุของการรบกวน/การเขียนทับ...

Steffen Ullrich avatar
se flag
คุณตรวจสอบบันทึกข้อผิดพลาดแล้วหรือยัง
br flag
nginx -t รายงานอะไร
phonon112358 avatar
us flag
@โรเบิร์ต ลองสัน `nginx -t nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf ไวยากรณ์ใช้ได้ nginx: ไฟล์การกำหนดค่า /etc/nginx/nginx.conf ทดสอบสำเร็จ `
phonon112358 avatar
us flag
@Steffen Ullrich: ฉันเห็นเฉพาะข้อผิดพลาดที่มาจาก SSLTest จาก qualys ซึ่งบ่งชี้ว่าการจับมือบางอย่างไม่สำเร็จ: `[crit] 94566#94566: *34 SSL_do_handshake() ล้มเหลว (SSL: ข้อผิดพลาด:14201044:รูทีน SSL:tls_choose_sigalg:internal ข้อผิดพลาด) ขณะจับมือ SSL ไคลเอนต์: 64.41.200.113 เซิร์ฟเวอร์: 0.0.0.0:443` แม้จะอยู่ในเดบั๊กโคลน ก็ไม่มีข้อผิดพลาด SSL เพิ่มเติมปรากฏขึ้นเมื่อฉันเข้าถึงไซต์
phonon112358 avatar
us flag
ข้อผิดพลาดอื่นที่มาจาก Qualys ssltest `[info] 47207#47207: *206 SSL_do_handshake() ล้มเหลว (SSL: error:1417A0C1:SSL Routines:tls_post_process_client_hello:no shared cipher) ขณะจับมือ SSL ไคลเอ็นต์: 64.41.200.114 เซิร์ฟเวอร์: 0.0 0.0:443`. แต่ฉันว่าเป็นเรื่องปกติ
drookie avatar
za flag
ลบ `ssl_ciphers` ลองใช้ค่าเริ่มต้นสำหรับผู้เริ่มต้น คุณอาจขาดรหัสสำหรับ TLS 1.3
phonon112358 avatar
us flag
@drookie การลบ `ssl_ciphers` อย่างแปลกประหลาดทำให้เซิร์ฟเวอร์ยอมรับ TLS 1.0 และ TLS 1.1 แต่ไม่ใช่ TLS 1.3! น่าสนใจมากที่ดูเหมือนว่าจะไม่สนใจ `ssl_protocols`...
Score:1
ธง us

หลังจากการทดสอบเพิ่มเติมหลายครั้งและการอ่านมาก ในที่สุดฉันก็พบวิธีแก้ปัญหา ฉันต้องเขียนการกำหนดค่า ssl ในไฟล์ http บล็อกไม่อยู่ใน เซิร์ฟเวอร์ บล็อกการกำหนดค่า nginx ของฉัน อย่างไรก็ตามวิธีนี้ใช้ได้เฉพาะในกรณีที่ฉันคัดลอกคำสั่งจากของฉัน ssl.conf ไฟล์อย่างชัดเจนไปที่ http บล็อกในของฉัน nginx.conf (มิฉะนั้น nginx -t เอาต์พุต

nginx: [emerg] จำนวนอาร์กิวเมนต์ที่ไม่ถูกต้องในคำสั่ง "include" ใน /etc/nginx/nginx.conf:33
nginx: การทดสอบไฟล์การกำหนดค่า /etc/nginx/nginx.conf ล้มเหลว

ด้วยเหตุผลบางอย่าง).

เพราะฉะนั้น ข้าพเจ้า http บล็อกของ nginx.conf ตอนนี้มีลักษณะดังนี้:

http {

  ...
 
    ssl_dhparam /etc/nginx/dhparams.pem;
    
    ssl_ecdh_curve X448:secp521r1:secp384r1;
    
    ssl_protocols TLSv1.3 TLSv1.2;
   ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA- AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';

   ...

    # การกำหนดค่าโฮสต์เสมือน
    ##

    รวม /etc/nginx/conf.d/*.conf;
    รวม /etc/nginx/sites-enabled/*;
}

ฉันไม่รู้ว่าทำไมต้องรวม/วางการตั้งค่า ssl เหล่านี้ในไฟล์ http บล็อกมากกว่าในแต่ละ เซิร์ฟเวอร์ บล็อก..... แต่ใช้งานได้และเปิดใช้งาน TLS 1.3!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา