Score:0

Apache reverse proxy พร้อมใบรับรองที่ลงนามเอง

ธง pl

ฉันใช้งานอุปกรณ์ฮาร์ดแวร์ Unifi ซึ่งมาพร้อมกับใบรับรองที่ลงนามด้วยตนเอง ซึ่งออกให้เมื่อ ยูนิไฟ.โลคอล. สำหรับการตั้งค่าปัจจุบันของฉัน ไม่มีตัวเลือกในการนำเข้าใบรับรองบนอุปกรณ์โดยตรงด้วยเหตุผลหลายประการ ดังนั้นฉันจึงพยายามกำจัดข้อความใบรับรองที่ไม่ถูกต้องในเบราว์เซอร์ของฉันโดยใช้พร็อกซีย้อนกลับที่ใช้ apache2 ซึ่งให้การเข้าถึงอุปกรณ์ภายใต้ โดเมนอื่นที่ปลอดภัยโดยใบรับรอง Letsencrypt

การตั้งค่าปัจจุบันของฉันมีลักษณะดังนี้:

แล็ปท็อป <-> Apache Reverse Proxy (2.4.48, Debian, ใบรับรองโดเมนตัวแทนที่เชื่อถือได้) <-> อุปกรณ์ Unifi (ใบรับรองที่ลงนามด้วยตนเอง)

ความคิดของฉันคือการจัดเตรียมโดเมนที่ปลอดภัยที่เรียกว่า unfi.mydomain.tld ซึ่งช่วยให้เข้าถึงอุปกรณ์ได้อย่างปลอดภัย

ใน apache reverse proxy ของฉัน ฉันสร้างและเปิดใช้งานไฟล์ปรับแต่งที่มีลักษณะดังนี้:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    Serveradmin [email protected]"
    ServerName unifi.mydomain.tld

    SSLProxyEngine On
    SSLProxyVerify none
    SSLProxyCheckPeerCN off
    SSLProxyCheckPeerName off
    SSLProxyCheckPeerExpire off

    ProxyPass "/" "https://10.0.1.1/"
    ProxyPassReverse "/" "https://10.0.1.1/"
    ProxyPreserveHost Off

    TransferLog /var/log/apache2/proxies/unifi_access.log
    ErrorLog /var/log/apache2/proxies/unifi_error.log

    <IfModule mod_headers.c>
        Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"
    </IfModule>

    SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 +TLSv1.2
    SSLCipherSuite SSL ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384
    SSLCipherSuite TLSv1.3 TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256
    SSLOpenSSLConfCmd DHParameters /mnt/certificates/diffie-hellman/dhparam4096.pem
    SSLHonorCipherOrder on
    SSLCompression off
    SSLSessionTickets off

    SSLCertificateFile /etc/letsencrypt/live/mydomain.tld/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/mydomain.tld/privkey.pem
</VirtualHost>

# Originally from /etc/letsencrypt/options-ssl-apache.conf
# Written directly here because otherwise SSLProtocol etc is overwritten
# Add vhost name to log entries:
SSLOptions +StrictRequire
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined
LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common

</IfModule>

แต่ถ้าฉันเข้าถึง unfi.mydomain.tldเบราว์เซอร์ของฉันส่งคืนใบรับรองสำหรับ ยูนิไฟ.โลคอล และไม่ใช่สำหรับ unfi.mydomain.tld และทำให้เกิดข้อผิดพลาดว่าใบรับรองไม่น่าเชื่อถือ เคล็ดลับหลายประการที่กล่าวถึงการเปิด SSLProxyVerify ถึง ไม่มี, และ SSLProxyCheckPeerName, SSLProxyCheckPeerCN, และ SSLProxyCheckPeerหมดอายุ ถึง ปิดอย่างไรก็ตาม เทคนิคเหล่านี้ไม่ได้ผล ไม่ใช่ตัวเลือกสำหรับฉันที่จะนำเข้าใบรับรอง Snakeoil ที่ลงนามด้วยตนเองของ Unifi บนเซิร์ฟเวอร์พร็อกซีย้อนกลับของฉัน

ฉันไม่แน่ใจว่า apache2 เองบ่นเกี่ยวกับใบรับรองหรือส่งคืนใบรับรองที่ไม่ถูกต้อง ฉันจะเข้าถึงอุปกรณ์ได้อย่างไรโดยการเรียกดู unfi.mydomain.tld โดยไม่ได้รับใบรับรองข้อผิดพลาดนี้

dave_thompson_085 avatar
jp flag
ไม่ใช่ apache เบราว์เซอร์ของคุณกำลังเชื่อมต่อกับ Unifi ไม่ใช่ apache ตามที่คุณต้องการ ตรวจสอบการจำแนกชื่อสำหรับ unifi.mydomain.tld ที่เบราว์เซอร์ใช้ ฉันพูดว่า 'การจำแนกชื่อ' ไม่ใช่เฉพาะ DNS; การจำแนกชื่อ _often_ ใช้ DNS แต่สามารถใช้วิธีอื่นได้มากมาย หากมีข้อสงสัย ให้ลองรับการจับภาพเครือข่าย (wireshark, tcpdump หรือที่คล้ายกัน) แสดงการเชื่อมต่อเบราว์เซอร์ และโดยเฉพาะที่อยู่ IP และที่อยู่ MAC ที่เชื่อมต่อด้วย
Score:1
ธง us

สิ่งนี้ได้ผลสำหรับฉัน!

ความต้องการ:

  1. Apache Tomcat บน: 8443 พร้อมรหัสที่ลงนามเอง
  2. Apache HTTPD พร้อม Reverse Proxy เป็น localhost:8443 Tomcat
  3. อาปาเช่ HTTPD ต้องใช้ การรับรองความถูกต้องร่วมกันของไคลเอนต์ หากนั่นไม่ใช่ข้อกำหนดสำหรับคุณ ให้ตั้งค่า: ไม่มี SSLVerifyClient
  4. Apache HTTPD จะส่งต่อข้อมูลประจำตัว X.509 ของผู้โทรผ่านพร็อกซีย้อนกลับไปยัง Tomcat



 บันทึก ErrorLog/ssl_error_log
 บันทึก TransferLog/ssl_access_log
 LogLevel เตือน
 ProxyRequests บน
 ProxyPass /test1 https://localhost:8443/test/
 ProxyPassReverse /test1 https://localhost:8443/test/
# การตั้งค่า SSL สำหรับ DMZ
 SSLEngine เปิดอยู่
 โปรโตคอล SSL TLSv1.2
 SSLCipherSuite สูง:!aNULL:!MD5:!SEED:!IDEA
 SSLCertificateKeyFile /home/jdoyle/sample_httpd_server_example_root_ca_.key
 SSLCertificateFile /home/jdoyle/sample_httpd_server_example_root_ca_.cer
 SSLCACertificateFile /home/jdoyle/consolidated_cacerts.cer
# การตั้งค่า SSL สำหรับ Reverse Proxy
 SSLProxyEngine เปิดอยู่
 SSLProxyVerify ต้องการ
 SSLProxyProtocol TLSv1.2
 SSLProxyCheckPeerName ปิดอยู่
 SSLProxyCACertificateFile /home/jdoyle/consolidated_cacerts.cer
 SSLVerifyClient ต้องการ
 SSL ตรวจสอบความลึก 10
# ส่ง SSL Conext ไปยัง Tomcat

RequestHeader ตั้งค่า SSL_CLIENT_S_DN "%{SSL_CLIENT_S_DN}s"
ส่วนหัวของคำขอตั้งค่า SSL_CLIENT_I_DN "%{SSL_CLIENT_I_DN}s"
RequestHeader ตั้งค่า SSL_SERVER_S_DN_OU "%{SSL_SERVER_S_DN_OU}s"
ส่วนหัวของคำขอตั้งค่า SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
ส่วนหัวของคำขอตั้งค่า SSL_CLIENT_V_START "%{SSL_CLIENT_V_START}s"
ส่วนหัวของคำขอตั้งค่า SSL_CLIENT_V_END "%{SSL_CLIENT_V_END}s"
RequestHeader ตั้งค่า SSL_CLIENT_M_VERSION "%{SSL_CLIENT_M_VERSION}s"
RequestHeader ตั้งค่า SSL_CLIENT_M_SERIAL "%{SSL_CLIENT_M_SERIAL}s"
ส่วนหัวของคำขอตั้งค่า SSL_CLIENT_VERIFY "%{SSL_CLIENT_VERIFY}s"
ส่วนหัวของคำขอตั้งค่า SSL_SERVER_M_VERSION "%{SSL_SERVER_M_VERSION}s"
RequestHeader ตั้งค่า SSL_SERVER_I_DN "%{SSL_SERVER_I_DN}s"
....

SSLOptions +ExportCertData +StrictRequire
....




หมายเหตุ:

ก. SSLProxyCACertificateFile ใช้สำหรับการเชื่อมต่อ httpd<->tomcat และมีคีย์สาธารณะของใบรับรองที่ลงนามด้วยตนเองของเซิร์ฟเวอร์ Tomcat

ข. SSLCACertificateFile ใช้สำหรับการเชื่อมต่อ DMZ <-> httpd และต้องมีและและใบรับรอง CA ทั้งหมดสำหรับการเชื่อมต่อขาเข้า

Drudge avatar
pl flag
ขอบคุณ หวังว่าฉันไม่จำเป็นต้องติดตั้งซอฟต์แวร์เพิ่มเติมเช่น Tomcat แต่วิธีนี้ใช้ได้ผล

โพสต์คำตอบ

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