Score:0

Nginx ย้อนกลับ Proxy Overwrite Certificate

ธง cn

ฉันมีปัญหาในการพยายามเขียนทับใบรับรองโดยใช้ NGINX เป็น Reverse Proxy ที่ส่งต่อคำขอทั้งหมดไปยังเซิร์ฟเวอร์ Apache ด้วยและใบรับรองเก่า (TLS 1.0)

นี่คือผลลัพธ์สำหรับไฟล์ .conf ของฉัน:

เซิร์ฟเวอร์ {
ฟัง 80;
server_name บทบัญญัติ.metrotel.com.ar;
ส่งคืน 301 https://provision.metrotel.com.ar$request_uri;
}

เซิร์ฟเวอร์ {
ฟัง 443 ssl http2;
server_name บทบัญญัติ.metrotel.com.ar;
ssl_certificate /etc/nginx/certs/metrotel.crt;
ssl_certificate_key /etc/nginx/certs/metrotel.key;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error_prov.log;
ที่ตั้ง / {
proxy_pass http://prov.metrotel.com.ar/;
proxy_ssl_certificate /etc/nginx/certs/metrotel.crt;
proxy_ssl_certificate_key /etc/nginx/certs/metrotel.key;

}
}

http://prov.metrotel.com.ar/ เป็นเซิร์ฟเวอร์ที่เว็บไซต์ตั้งอยู่และมีใบรับรองเก่า มีวิธีเขียนทับใบรับรองนั้นโดยใช้ใบรับรองที่ฉันมีใน nginx reverse proxy ของฉันหรือไม่

ฉันได้ลองหลายตัวเลือกที่ฉันมักจะได้รับ "NET::ERR_SSL_OBSOLETE_VERSION"


ไคลเอนต์ Chrome บน (172.20.1.4)

พร็อกซี (Nginx บน srv-nginx-a.metrotel.local -192.168.151.112)

แบ็กเอนด์ (prov.metrotel.com.ar) 192.168.59.20

tcpdump: เอาต์พุต verbose ถูกระงับ ใช้ -v หรือ -vv สำหรับการถอดรหัสโปรโตคอลแบบเต็ม
กำลังฟัง ens192, ประเภทลิงก์ EN10MB (Ethernet), ขนาดการจับภาพ 262144 ไบต์

11:50:59.260014 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: ค่าสถานะ [S], seq 979144705, ชนะ 29200, ตัวเลือก [mss 1460,nop,nop,sackOK,nop,wscale 4 ], ความยาว 0

11:50:59.260165 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: ค่าสถานะ [S.], seq 3107298579, ack 979144706, ชนะ 29200, ตัวเลือก [mss 1460,nop,nop,sackตกลง, nop,wscale 7], ความยาว 0

11:50:59.260397 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: ค่าสถานะ [.], ack 1, ชนะ 1825, ความยาว 0

11:50:59.282128 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: Flags [P.], seq 1:536, ack 1, ชนะ 1825, ความยาว 535

11:50:59.282204 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: ค่าสถานะ [.], ack 536, ชนะ 237, ความยาว 0

11:50:59.282659 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: Flags [P.], seq 1:153, ack 536, win 237, length 152

11:50:59.282869 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: ค่าสถานะ [.], ack 153, ชนะ 1892, ความยาว 0

11:50:59.293101 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: Flags [P.], seq 536:587, ack 153, win 1892, length 51

11:50:59.332644 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: ค่าสถานะ [.], ack 587, ชนะ 237, ความยาว 0

11:50:59.332935 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: Flags [P.], seq 587:1300, ack 153, win 1892, length 713

11:50:59.332967 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: ค่าสถานะ [.], ack 1300, ชนะ 248, ความยาว 0

11:50:59.333185 IP srv-nginx-a.metrotel.local.53190 > 192.168.59.20.http: ค่าสถานะ [S], seq 1924765737, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 
180831520 ecr 0,nop,wscale 7], ความยาว 0

11:50:59.333584 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53190: ค่าสถานะ [S.], seq 4244116336, ack 1924765738, ชนะ 5792, ตัวเลือก [mss 1460,sackOK,TS val 3558238853 ecr 180831520,nop,wscale 7], ความยาว 0

11:50:59.333605 IP srv-nginx-a.metrotel.local.53190 > 192.168.59.20.http: ค่าสถานะ [.], ack 1, ชนะ 229, ตัวเลือก [nop,nop,TS val 180831521 ecr 3558238853], ความยาว 0

11:50:59.333639 IP srv-nginx-a.metrotel.local.53190 > 192.168.59.20.http: ค่าสถานะ [P.], seq 1:757, ack 1, ชนะ 229, ตัวเลือก [nop,nop,TS
ค่า 180831521 ecr 3558238853], ความยาว 756: HTTP: GET / HTTP/1.0

11:50:59.333915 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53190: ค่าสถานะ [.], ack 757, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238854 ecr 180831521], ความยาว 0

11:50:59.334144 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53190: Flags [P.], seq 1:520, ack 757, win 58, options [nop,nop,TS val 3558238854 ecr 180831521], ความยาว 519: HTTP: พบ HTTP/1.1 302

11:50:59.334157 IP srv-nginx-a.metrotel.local.53190 > 192.168.59.20.http: ค่าสถานะ [.], ack 520, ชนะ 237, ตัวเลือก [nop,nop,TS val 180831521 ecr 3558238854], ความยาว 0

11:50:59.334169 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53190: ค่าสถานะ [F.], seq 520, ack 757, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238854 ecr 180831521 ], ความยาว 0

11:50:59.334236 IP srv-nginx-a.metrotel.local.53190 > 192.168.59.20.http: ค่าสถานะ [F.], seq 757, ack 521, ชนะ 237, ตัวเลือก [nop,nop,TS
ค่า 180831521 ecr 3558238854], ความยาว 0

11:50:59.334272 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: Flags [P.], seq 153:1048, ack 1300, win 248, length 895

11:50:59.334438 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53190: 
ค่าสถานะ [.], ack 758, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238854 ecr 180831521], ความยาว 0

11:50:59.373720 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: ตั้งค่าสถานะ [.], ack 1048, ชนะ 2004, ความยาว 0

11:50:59.407267 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: Flags [P.], seq 1300:2013, ack 1048, win 2004, length 713

11:50:59.407531 IP srv-nginx-a.metrotel.local.53192 > 192.168.59.20.http: ค่าสถานะ [S], seq 3919551832, ชนะ 29200, ตัวเลือก [mss 1460,sackOK,TS val 180831594 ecr 0,nop, wมาตราส่วน 7], ความยาว 0

11:50:59.407867 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53192: ค่าสถานะ [S.], seq 2604868674, ack 3919551833, ชนะ 5792, ตัวเลือก [mss 1460,sackOK,TS val 3558238922 ecr 180831594,nop,wscale 7], ความยาว 0

11:50:59.407897 IP srv-nginx-a.metrotel.local.53192 > 192.168.59.20.http: ค่าสถานะ [.], ack 1, ชนะ 229, ตัวเลือก [nop,nop,TS val 180831595 ecr 3558238928], ความยาว 0

11:50:59.407950 IP srv-nginx-a.metrotel.local.53192 > 192.168.59.20.http: ค่าสถานะ [P.], seq 1:757, ack 1, ชนะ 229, ตัวเลือก [nop,nop,TS
ค่า 180831595 ecr 3558238928], ความยาว 756: HTTP: GET / HTTP/1.0

11:50:59.408211 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53192: ค่าสถานะ [.], ack 757, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238928 ecr 180831595], ความยาว 0

11:50:59.408605 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53192: ค่าสถานะ [P.], seq 1:520, ack 757, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238928 ecr 180831595], ความยาว 519: HTTP: HTTP/1.1 302 พบ

11:50:59.408627 IP srv-nginx-a.metrotel.local.53192 > 192.168.59.20.http: ค่าสถานะ [.], ack 520, ชนะ 237, ตัวเลือก [nop,nop,TS val 180831596 ecr 3558238928], ความยาว 0

11:50:59.408642 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53192: ค่าสถานะ [F.], seq 520, ack 757, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238928 ecr 180831595 ], ความยาว 0

11:50:59.408711 IP srv-nginx-a.metrotel.local.53192 > 192.168.59.20.http: ค่าสถานะ [F.], seq 757, ack 521, ชนะ 237, ตัวเลือก [nop,nop,TS
ค่า 180831596 ecr 3558238928], ความยาว 0

11:50:59.408748 IP srv-nginx-a.metrotel.local.https > 172.20.1.4.19710: Flags [P.], seq 1048:1943, ack 2013, ชนะ 259, ความยาว 895

11:50:59.408974 IP 192.168.59.20.http > srv-nginx-a.metrotel.local.53192: ค่าสถานะ [.], ack 758, ชนะ 58, ตัวเลือก [nop,nop,TS val 3558238929 ecr 180831596], ความยาว 0

11:50:59.408994 IP 172.20.1.4.19710 > srv-nginx-a.metrotel.local.https: ตั้งค่าสถานะ [.], ack 1943, ชนะ 2116, ความยาว 0
Steffen Ullrich avatar
se flag
ไม่ชัดเจนสำหรับฉันว่าคุณกำลังทำอะไรอยู่และไม่มีอะไรทำซ้ำได้ที่นี่ (โดเมนไม่สามารถแก้ไขใน DNS) คุณได้รับข้อผิดพลาดนี้ที่ไหน URL ใดที่คุณพยายามเข้าถึงอย่างแน่นอน ด้วยเครื่องมือใด นอกจากนี้ TLS 1.0 ไม่ใช่ใบรับรองเก่า แต่เป็นโปรโตคอล TLS เวอร์ชันเก่า และในการกำหนดค่าของคุณ คุณไม่ได้เข้าถึงไซต์ภายในด้วย HTTPS เพียงแค่ `http://...`
Julian Rios avatar
cn flag
Steffen โดเมนเหล่านั้นเป็นโดเมนท้องถิ่น ไม่สามารถเข้าถึงได้จากอินเทอร์เน็ต สิ่งที่ฉันต้องการทำคือใช้ nginx เป็นพร็อกซีเพื่อพิมพ์ allocation.metrotel.com.ar ในเบราว์เซอร์ของฉัน และเมื่อ nginx อ่าน URL นั้น ก็จะส่งไปที่ prov.metrotel.com.ar ฉันแย่ที่ชี้ว่า TLS 1.0 เป็นใบรับรองเก่า มันเป็นโปรโตคอลเก่า คุณพูดถูก ฉันได้รับข้อผิดพลาดนั้นใน prov.metrotel.com.ar (เซิร์ฟเวอร์โฮสติ้ง) Ig ฉันเปลี่ยน proxy_pass เป็น https://prov.metrotel.com.ar/ ฉันได้รับ NET::ERR_SSL_OBSOLETE_VERSION เหมือนกัน คำถามของฉันคือมีวิธี "เขียนทับ" TLS 1.0 ด้วย TLS 1.2 ด้วยพร็อกซีหรือไม่
Steffen Ullrich avatar
se flag
*"ถ้าฉันเปลี่ยน proxy_pass เป็น prov.metrotel.com.ar ฉันจะได้รับ NET::ERR_SSL_OBSOLETE_VERSION เหมือนเดิม"* - ยังไม่ชัดเจนว่าคุณได้รับข้อผิดพลาดนี้จากที่ใด (ไคลเอ็นต์ บันทึก nginx ...) และ URL และ ลูกค้าของคุณใช้สำหรับการทดสอบอย่างแน่นอน URL ที่ไคลเอนต์ใช้จะต้องเป็น URL ที่ให้บริการโดย nginx (`provision...`) ไม่ใช่ URL ดั้งเดิมที่ให้บริการโดย Apache (`prov...`)
dave_thompson_085 avatar
jp flag
มันไม่ใช่ 'การเขียนทับ' จริงๆ ด้วยพร็อกซีใด ๆ รวมถึง nginx มีการเชื่อมต่อ TLS-เดิมคือ SSL ที่แตกต่างกันสองแบบ หนึ่งการเชื่อมต่อจากไคลเอ็นต์ (เบราว์เซอร์ ฯลฯ) ไปยังพร็อกซี หนึ่งการเชื่อมต่อจากพร็อกซีไปยังเซิร์ฟเวอร์ส่วนหลัง การเชื่อมต่อและคุณสมบัติของทั้งสองนี้แยกกันโดยสิ้นเชิง แม้ว่าข้อมูลระดับ HTTP ที่ได้รับในที่หนึ่งจะถูกส่งต่อไปยังอีกที่หนึ่ง คุณสามารถจับภาพด้วย wireshark หรือที่คล้ายกัน โดยเฉพาะอย่างยิ่งบนหรือใกล้กับเครื่องพร็อกซี (nginx) มากที่สุด
Julian Rios avatar
cn flag
สวัสดีพวกขอบคุณสำหรับความช่วยเหลือของคุณ พรุ่งนี้ฉันจะแก้ไขจุดบกพร่องและโพสต์ไว้ที่นี่ การใช้ TLS 1.2 และ TLS 1.3 ในการฟัง 443 ssl แสดง NET::ERR_SSL_OBSOLETE_VERSION ต่อไป ข้อความที่แสดงในเบราว์เซอร์ถูกส่งจากเซิร์ฟเวอร์ส่วนหลัง (prov.metrotel.com.at) เป็นข้อผิดพลาดเดียวกันใน Chrome, Firefox และ Opera ฉันใช้ allocation.metrotel.com.ar เป็น URL ในไคลเอนต์ ดังนั้นการเปลี่ยนเส้นทางจึงใช้งานได้ แต่ฉันไม่สามารถดัมพ์ TLS v1.0 และ "อัปเกรด" เป็น TLS v1.2 ได้ 1.- ไคลเอ็นต์ไปยัง Proxy คือ TLS v1.2 2.- พร็อกซีไปยังแบ็กเอนด์คือ TLS v1.0 3.- ในที่สุดไคลเอนต์ไปยังแบ็กเอนด์คือ TLS v1.0 :(
dave_thompson_085 avatar
jp flag
ตาม tcpdump nginx ได้รับ (อย่างชัดเจน) การเปลี่ยนเส้นทาง 302 สองครั้ง แม้ว่าจะไม่แสดง URL ก็ตาม **การเปลี่ยนเส้นทางอาจทำให้ไคลเอ็นต์ไปที่แบ็กเอนด์โดยตรงแทนที่จะเป็นพร็อกซี** หากคุณมี (หรือรับ) curl ได้ ให้ลองใช้ `curl -vL https://proxy/desired_URL` เพื่อดูว่าที่ไหน/อย่างไร กำลังเปลี่ยนเส้นทาง หรือใน Chrome เปิดใช้งาน dev-tools (F12) และเลือกแท็บเครือข่าย หรือใช้ wireshark (ตามที่ฉันแนะนำครั้งแรก) เพื่อดูการถอดรหัสที่สมบูรณ์ หากคุณไม่สามารถติดตั้งได้ ให้ใช้ `tcpdump -w` เพื่อจับภาพเป็นไฟล์และย้ายไฟล์นั้นไปยังที่ที่คุณสามารถใช้ wireshark ได้
dave_thompson_085 avatar
jp flag
เพิ่ม: ด้วย `curl -vL` คุณอาจเปลี่ยนเส้นทางเอาต์พุตข้อมูลไปยังไฟล์ อาจเป็น `/dev/null` (หรือ Windows `NUL:`) เพื่อให้โฟกัสที่ส่วนหัวได้ง่าย
Score:1
ธง uz

ลองเปิด TLS1.2 และ 1.3 โดยเพิ่ม ssl_protocols TLSv1.2 TLSv1.3; ของคุณ เซิร์ฟเวอร์ ส่วนดังนี้

เซิร์ฟเวอร์ {
    ฟัง 80;
    server_name บทบัญญัติ.metrotel.com.ar;
    ส่งคืน 301 https://provision.metrotel.com.ar$request_uri;
    ssl_protocols TLSv1.2 TLSv1.3;
}
dave_thompson_085 avatar
jp flag
ใน http (ฟัง 80) `เซิร์ฟเวอร์` ที่จะไม่ทำอะไรเลย มันจะมีผลเฉพาะใน https (listen 443) `server` แต่ค่าเริ่มต้นควรมีมากถึง 1.2 ซึ่งน่าจะทำให้ Chrome มีความสุข
Score:0
ธง cn

บน wireshark pcap การเชื่อมต่อระหว่างไคลเอนต์ (Chrome) และพร็อกซี (Nginx) คือ TLS 1.2 ส่วนอื่น ๆ (TLS เก่าของ Nginx-Apache) เป็น HTTP เท่านั้น พร็อกซีใช้งานได้ดี มีการเชื่อมต่อ "ไม่" ระหว่างไคลเอนต์และเซิร์ฟเวอร์ พร็อกซีอยู่ตรงกลางเสมอ

โพสต์คำตอบ

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