Cần trợ giúp khi xử lý lỗi máy chủ web Https - Bắt tay SSL không thành công


9

Tôi đã làm theo hướng dẫn này: http://hints.macworld.com/article.php?story=20041129143420344

Đây là định nghĩa máy chủ ảo của tôi

<VirtualHost *:443>
    SSLEngine on
    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    CacheDisable *
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    DocumentRoot "/Users/me/projects/myproject/public"
    ServerName ssl.mydomain.com
    ServerAlias *.ssl.mydomain.com
    SSLCertificateKeyFile "/private/etc/apache2/certs/webserver.nopass.key"
    SSLCertificateFile "/private/etc/apache2/certs/newcert.pem"
    SSLCACertificateFile "/private/etc/apache2/certs/demoCA/cacert.pem"
    SSLCARevocationPath "/private/etc/apache2/certs/demoCA/crl"
    ErrorLog "/Users/me/Desktop/ssl.log"

    ProxyPass / https://localhost:3002/
    ProxyPassReverse / https://localhost:3002
    ProxyPreserveHost on    
</VirtualHost>

Và khi tôi thử kết nối với viov thứ bảy, trình duyệt web, tôi gặp lỗi này:

[Thu Feb 02 16:50:40 2012] [error] (502)Unknown error: 502: proxy: pass request body failed to 127.0.0.1:3002 (localhost)
[Thu Feb 02 16:50:40 2012] [error] [client 96.11.81.39] proxy: Error during SSL Handshake with remote server returned by /session/new
[Thu Feb 02 16:50:40 2012] [error] proxy: pass request body failed to 127.0.0.1:3002 (localhost) from 96.11.81.39 ()

Làm thế nào để tôi gỡ lỗi / sửa lỗi này?

Câu trả lời:


12

Để thêm vào câu trả lời của vbartoni, dường như từ Apache 2.4 trở lên, có các mặc định khác nhau và một chỉ thị mới.

Tôi đang chạy Apache 2.4.6 và tôi đã phải thêm các lệnh sau để làm cho nó hoạt động:

SSLProxyEngine on
SSLProxyVerify none 
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off

1
Đó là công việc - chỉ với tất cả những chỉ thị đó sẽ không phàn nàn.
Michael Böckling

@ MichaelBöckling Cảm ơn bạn đã giữ tôi lên. Tôi muốn chỉ ra cụ thể rằng tài liệu nói rằng SSLProxyCheckPeerNamethay thế SSLProxyCheckPeerCNnhưng nó sẽ không hoạt động trừ khi bạn chỉ định tất cả các chỉ thị.
đôi

3

Đừng bận tâm với HTTPS giữa máy chủ của bạn và máy chủ phụ của bạn, có rất ít điểm trong việc bật SSL cho localhostkết nối.

Để làm rõ, sử dụng ProxyPass / http://localhost:3002/ thay vìProxyPass / https://localhost:3002/


Ngoài ra, nếu bạn thực sự muốn kết nối proxy ngược của mình với máy chủ back-end bằng SSL (chủ yếu hữu ích khi máy chủ đó không phải là proxy ngược của Apache httpd), ngoài ra https://backend-server-address, hãy sử dụng các lệnh SSLProxy*để thiết lập CA certs, như tài liệu trong phần giới thiệu mod_proxytài liệu . Cụ thể, bạn sẽ cần phải định cấu hình SSLProxyCACertificateFilevà đảm bảo chứng chỉ của máy chủ phụ trợ được cấp cho đúng tên máy chủ như được thấy bởi Apache Httpd (tức là localhosttrong trường hợp của bạn).


Nếu bạn không kết nối với máy chủ phụ trợ bằng SSL, có thể không phát hiện ra bạn thực sự đang sử dụng SSL và được định cấu hình để buộc bạn truy cập SSL (do đó chuyển hướng vô hạn). Bạn có thể muốn xem xét các cơ chế tương tự như những gì Jetty làm với forwardedtùy chọn của nó (để có thể nói cho back-end nó đằng sau một proxy). Rails có thể giải thíchX-Forwarded-Proto theo mặc định. Trong trường hợp này, hãy thêm nó vào cấu hình Apache của bạn (trong máy chủ ảo SSL):

RequestHeader set X-Forwarded-Proto 'https'

Dường như có một vấn đề tương tự được thảo luận ở đây , ví dụ.


SSLProxy chỉ được đề cập một lần trên liên kết đó. Không có ví dụ về cách sử dụng nó. Tôi đã thay đổi tiêu đề yêu cầu để được đặt X-Forwarded-Proto 'https' ... nhưng nó vẫn không hoạt động / Tôi gặp lỗi tương tự. Đi localhost: 3002 cũng cung cấp cho các lỗi tương tự
NullVoxPopuli

Có nhiều lý do hợp lệ để kết nối với https với localhost: ví dụ socket.io trong back-end HTTPS. Nó sẽ thông qua các lỗi với nội dung hỗn hợp.
Florestan06

3

Tôi gặp vấn đề tương tự (cùng một nhật ký lỗi), ngoại trừ việc proxy đang chuyển tiếp lưu lượng https đến một máy chủ khác.
Vì tôi lười biếng và các máy chủ nằm trong mạng bị cô lập của riêng tôi, các chỉ thị này đã giải quyết được vấn đề:

SSLProxyVerify không có
SSLProxyCheckPeerCN tắt


1

Nếu máy chủ phụ trợ sử dụng chứng chỉ tự ký hết hạn, cần thêm một tùy chọn (nếu không có quyền truy cập vào máy chủ phụ trợ):

SSLProxyCheckPeerExpire tắt

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.