2013-01-05 22 views
7

Tôi đang cố gắng để thực hiện một máy chủ SSL trong hệ thống sử dụng FiddlerCore:SSL nhận một kỷ lục mà vượt quá độ dài tối đa cho phép khi sửa đổi theo yêu cầu với cáy

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace fiddlerCoreTest 
{ 
    using System.IO; 
    using System.Threading; 
    using Fiddler; 

    class Program 
    { 
     static Proxy oSecureEndpoint; 
     static string sSecureEndpointHostname = "localhost"; 
     static int iSecureEndpointPort = 7777; 

     static void Main(string[] args) 
     { 
      //var tt = Fiddler.CertMaker.GetRootCertificate().GetRawCertData(); 
      //File.WriteAllBytes("root.crt",tt); 

      Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS) 
      { 
       oS.bBufferResponse = false;    

       if ((oS.hostname == sSecureEndpointHostname)&&oS.port==7777) 
       { 
        oS.utilCreateResponseAndBypassServer(); 
        oS.oResponse.headers.HTTPResponseStatus = "200 Ok"; 
        oS.oResponse["Content-Type"] = "text/html; charset=UTF-8"; 
        oS.oResponse["Cache-Control"] = "private, max-age=0"; 
        oS.utilSetResponseBody("<html><body>Request for httpS://" + sSecureEndpointHostname + ":" + iSecureEndpointPort.ToString() + " received. Your request was:<br /><plaintext>" + oS.oRequest.headers.ToString()); 
       } 
      }; 

      FiddlerCoreStartupFlags oFCSF = FiddlerCoreStartupFlags.Default; 
      oFCSF = (oFCSF & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy); 

      Fiddler.FiddlerApplication.Startup(8877, oFCSF); 

      oSecureEndpoint = FiddlerApplication.CreateProxyEndpoint(iSecureEndpointPort, true, sSecureEndpointHostname); 
      if (null != oSecureEndpoint) 
      { 
       FiddlerApplication.Log.LogFormat("Created secure end point listening on port {0}, using a HTTPS certificate for '{1}'", iSecureEndpointPort, sSecureEndpointHostname); 
      } 

      Console.WriteLine("Press any key to exit"); 

      Console.ReadKey(); 
     } 
    } 
} 

trong firefox, GET http://localhost:7777/ hoạt động tốt, nhưng khi tôi GET https://localhost:7777/, báo cáo firefox lỗi sau:

SSL received a record that exceeded the maximum permissible length

Tại sao tôi lại có được điều này, và làm thế nào tôi có thể sửa chữa nó?

CẬP NHẬT Điều này xảy ra chỉ khi tôi sử dụng trình kích hoạt làm proxy với firefox. Khi tôi xóa proxy không hợp lệ, tôi có thể truy cập https://localhost:7777/. Tuy nhiên, tôi cũng muốn có thể truy cập https://localhost:7777/ qua proxy

+0

Hãy sao lưu một chút. Khi Fiddler * không * được đặt làm proxy trong Firefox, bạn có thể truy cập vào https: // localhost: 7777 không? Ngoài ra, phiên bản Firefox chính xác mà bạn đang sử dụng là gì? Một breakpoint trên utilCreateResponseAndBypassServer có bao giờ bị tấn công không? – EricLaw

+0

Tôi đang sử dụng ff17.0.1. Khi tôi truy cập vào 'https: // localhost: 7777' mà không có proxy, nó hoạt động. 'oS.utilCreateResponseAndBypassServer();' bị nhấn và hàm trả về một đáp ứng với lõi fiddler. –

Trả lời

1

Các vấn đề trong tình huống này là bạn đang xử lý giao thông này hai lần:

Thứ nhất, trình duyệt sẽ gửi một CONNECT đến cổng 8888 nói: "Hãy cho tôi một/đường hầm TCP IP để cổng 7777" và sau đó sau khi Fiddler nói "Được rồi, chúng tôi sẽ làm điều đó" khách hàng gửi yêu cầu HTTPS qua đường hầm đó tới cổng 7777.

Vấn đề ở đây là bạn đang mang lại phản hồi CONNECT và trả về HTML thay vì cho phép bắt tay HTTPS từ cổng 7777 để đi qua.

Cách đơn giản nhất để khắc phục điều này sẽ thay đổi mã BeforeRequest của bạn như sau:

if ((oS.hostname == sSecureEndpointHostname) && (oS.port==7777) 
    && !oS.HTTPMethodIs("CONNECT")) { 

Sau khi bạn làm điều này, đường hầm CONNECT của bạn sẽ không còn nhận được đọc sai và cái bắt tay HTTPS sẽ thành công.

1

Lưu lượng truy cập HTTPS được mã hóa và không hoạt động như proxy trình gỡ lỗi web không thể giải mã/phân tích dữ liệu gói được gửi qua trình phát. Nó sử dụng một cuộc tấn công MITM để giải mã lưu lượng SSL được gửi qua fiddler, xem tại đây: http://www.fiddler2.com/fiddler/help/httpsdecryption.asp

Vì vậy, bạn phải bật tùy chọn SSL ở chế độ khó hiểu, sau đó kiểm tra lại. Nếu nó không hoạt động, hãy cố gắng cung cấp một chứng chỉ MITM thủ công để không sử dụng.

+0

fiddler giải mã lưu lượng truy cập ssl ok. nhưng khi tôi đang cố gắng sửa đổi nó, tôi nhận được lỗi này –

+0

Fiddler sẽ cho phép bạn sửa đổi gói và thông tin bên trong; nếu bạn ước. Nó được cho là có thuộc tính Fiddler Injector mà bạn có thể cấu hình. – Greg

+0

tốt, theo kinh nghiệm của tôi nó cho phép tôi sửa đổi các yêu cầu http tốt, và thất bại trên https yêu cầu với lỗi này –

Các vấn đề liên quan