Trên dây: Công cụ ghi lại mạng dành cho nhà phát triển API

Lane LiaBraaten, nhóm Google Data API
Tháng 6 năm 2007

Giới thiệu

Việc phát triển các ứng dụng tương tác với các dịch vụ web gây ra một loạt các vấn đề độc đáo. Một nguyên nhân phổ biến gây thất vọng là không biết chính xác thư nào được gửi đến máy chủ hoặc nhận được phản hồi nào. Một số lỗi khó theo dõi nhất là do ngắt kết nối giữa những gì chúng ta nghĩ là chúng ta đang gửi tới máy chủ và những gì thực sự đang diễn ra.

Bài viết này giới thiệu một số công cụ có thể giúp dữ liệu trên mạng trở nên rõ ràng và hữu ích hơn. Thường được gọi là "công cụ đánh cắp gói", những công cụ này ghi lại tất cả các gói mạng di chuyển trên giao diện mạng của bạn. Việc kiểm tra nội dung của các gói này và thứ tự gửi và nhận các gói này có thể là một kỹ thuật gỡ lỗi hữu ích.

Ví dụ: Lấy nguồn cấp dữ liệu công khai

Tôi đang tập hợp một nhóm đạp xe để đi từ thiện và tạo lịch cho các sự kiện như phiên thông tin, chiến dịch gây quỹ và đào tạo. Tôi đã đặt lịch này ở chế độ công khai để các thành viên trong nhóm và những người đi xe khác có thể xem lịch và tham gia các sự kiện. Tôi cũng muốn gửi bản tin với các sự kiện sắp tới, vì vậy, thay vì sao chép thông tin từ trang web Lịch Google, tôi có thể sử dụng API dữ liệu Lịch Google để truy vấn lịch này và truy xuất các sự kiện.

Tài liệu về API Lịch Google cung cấp thông tin về cách sử dụng API Dữ liệu Google RESTful để tương tác với lịch của tôi theo phương thức lập trình. (Lưu ý của người chỉnh sửa: kể từ phiên bản 3, API Lịch Google không còn sử dụng định dạng Dữ liệu của Google nữa). Điều đầu tiên cần làm là nhận URL nguồn cấp dữ liệu sự kiện của lịch bằng cách nhấp vào nút trên trang cài đặt lịch:

http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic

Bạn có thể tham khảo tài liệu trên Lịch Google để tìm và hiển thị các sự kiện trên lịch như thế này, trong đó PUBLIC_FEED_URL chứa URL nguồn cấp dữ liệu sự kiện.

CalendarService myService = new CalendarService("exampleCo-fiddlerExample-1");
final String PUBLIC_FEED_URL = "http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic";
URL feedUrl = new URL(PUBLIC_FEED_URL);
CalendarEventFeed resultFeed = myService.getFeed(feedUrl, CalendarEventFeed.class);

System.out.println("All events on your calendar:");
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
  CalendarEventEntry entry = resultFeed.getEntries().get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();

Thao tác này sẽ tạo ra danh sách các sự kiện cơ bản trên lịch của tôi:

All events on your calendar:
    MS150 Training ride
    Meeting with Nicole
    MS150 Information session

Đoạn mã ở trên hiển thị tiêu đề của các sự kiện trên lịch, nhưng còn phần dữ liệu còn lại mà chúng tôi nhận được từ máy chủ thì sao? Thư viện ứng dụng Java không làm cho việc xuất nguồn cấp dữ liệu hoặc mục nhập dưới dạng XML trở nên đơn giản, và ngay cả khi có thì XML cũng không phải là tất cả. Còn các tiêu đề HTTP đi kèm với yêu cầu thì sao? Truy vấn có được gửi hoặc chuyển hướng không? Với những phép toán phức tạp hơn, những câu hỏi này ngày càng trở nên quan trọng, nhất là khi có sự cố xảy ra và chúng tôi gặp lỗi. Phần mềm phân tích cú pháp gói có thể trả lời những câu hỏi này bằng cách tiết lộ lưu lượng truy cập mạng.

tcpdump (tcpdump)

tcpdump là một công cụ dòng lệnh hoạt động trên các nền tảng giống Unix, nhưng cũng có một cổng Windows có tên là WinDump. Giống như hầu hết các tiện ích âm thanh gói, tcpdump đặt thẻ mạng của bạn vào chế độ quảng cáo không bắt buộc, đòi hỏi đặc quyền của người dùng cấp cao. Để sử dụng tcpdump, bạn chỉ cần chỉ định giao diện mạng để nghe, và lưu lượng truy cập mạng sẽ được gửi đến stdout:

sudo tcpdump -i eth0

Nếu chạy lệnh này, bạn sẽ bị bắn phá bởi tất cả các loại lưu lượng truy cập mạng, mà bạn sẽ không nhận ra một số sự kiện. Bạn chỉ có thể chuyển tiếp đầu ra đến một tệp và grep sau này, nhưng điều đó có thể dẫn đến một số tệp rất lớn. Hầu hết các phần mềm chụp gói đều có một số cơ chế lọc tích hợp sẵn, vì vậy, bạn chỉ chụp những gì bạn cần.

tcpdump hỗ trợ lọc dựa trên nhiều đặc điểm của lưu lượng truy cập mạng. Ví dụ: bạn có thể yêu cầu tcpdump chỉ thu thập lưu lượng truy cập đến hoặc từ máy chủ của mình trên cổng 80 (thông báo HTTP) bằng cách chèn tên máy chủ của máy chủ vào biểu thức sau:

dst or src host <hostname> and port 80

Đối với mỗi gói khớp với biểu thức lọc, tcpdump sẽ hiển thị dấu thời gian, nguồn và đích của gói cũng như một số cờ TCP. Thông tin này có thể đáng giá vì nó cho biết thứ tự gửi và nhận gói.

Bạn cũng nên xem nội dung của các gói. Cờ '-A' yêu cầu tcpdump in từng gói bằng ASCII, hiển thị các tiêu đề HTTP và nội dung thông báo. Cờ '-s' được dùng để chỉ định số byte cần hiển thị (trong đó '-s 0' có nghĩa là không cắt bớt nội dung thông báo).

Kết hợp tất cả lại với nhau, chúng ta sẽ nhận được lệnh sau:

sudo tcpdump -A -s 0 -i eth0 dst or src host <hostname> and port 80

Nếu chạy lệnh này, sau đó thực thi ví dụ .Java ngắn ở trên, bạn sẽ thấy tất cả các giao tiếp mạng liên quan đến thao tác này. Trong số các lưu lượng truy cập bạn sẽ thấy yêu cầu HTTP GET:

22:22:30.870771 IP dellalicious.mshome.net.4520 > po-in-f99.google.com.80: P 1:360(359) ack 1 win 65535
E.....@....\...eH..c...P.=.....zP......GET /calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic HTTP/1.1
User-Agent: exampleCo-fiddlerExample-1 GCalendar-Java/1.0.6 GData-Java/1.0.10(gzip)
Accept-Encoding: gzip
Cache-Control: no-cache
Pragma: no-cache
Host: www.google.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

Bạn cũng sẽ thấy thông báo phản hồi 200 OK chứa nguồn cấp dữ liệu của Google. Lưu ý rằng nguồn cấp dữ liệu được chia nhỏ giữa bốn gói:

22:22:31.148789 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1:1431(1430) ack 360 win 6432
E...1 ..2.I.H..c...e.P.....z.=.:P..M...HTTP/1.1 200 OK
Content-Type: application/atom+xml; charset=UTF-8
Cache-Control: max-age=0, must-revalidate, private
Last-Modified: Mon, 11 Jun 2007 15:11:40 GMT
Transfer-Encoding: chunked
Date: Sun, 24 Jun 2007 02:22:10 GMT
Server: GFE/1.3

13da
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom'
xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gCal='http://sc
hemas.google.com/gCal/2005' xmlns:gd='http://schemas.google.com/g/2005'><id>http
://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo
gle.com/public/basic</id><updated>2007-06-11T15:11:40.000Z</updated><category sc
heme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2
005#event'></category><title type='text'>MS150 Training Schedule</title><subtitl
e type='text'>This calendar is public</subtitle><link rel='http://schemas.google
.com/g/2005#feed' type='application/atom+xml' href='http://www.google.com/calend
ar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic'></
link><link rel='self' type='application/atom+xml' href='http://www.google.com/ca
lendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic
?max-results=25'></link><author><name>Lane LiaBraaten</name><email>api.lliabraa@
gmail.com</email></author><generator version='1.0' uri='http://www.google.com/ca
lendar'>Google Calendar</generator><openSearch:totalRe


22:22:31.151501 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 1431:2861(1430) ack 360 win 6432
E...1!..2.I.H..c...e.P.......=.:P.. 2...sults>3</openSearch:totalResults><openSe
arch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch
:itemsPerPage><gd:where valueString=''></gd:where><gCal:timezone value='America/
Los_Angeles'></gCal:timezone><entry><id>http://www.google.com/calendar/feeds/24v
j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j
740hnj46744</id><published>2007-06-11T15:11:05.000Z</published><updated>2007-06-
11T15:11:05.000Z</updated><category scheme='http://schemas.google.com/g/2005#kin
d' term='http://schemas.google.com/g/2005#event'></category><title type='text'>M
S150 Training ride</title><summary type='html'>When: Sat Jun 9, 2007 7am to 10am

&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Status:     confirmed</summary><conte
nt type='text'>When: Sat Jun 9, 2007 7am to 10am&amp;nbsp; PDT&lt;br&gt;   &lt;b
r&gt;Event Status:     confirmed</content><link rel='alternate' type='text/html'
 href='http://www.google.com/calendar/event?eid=ZGd0NDAwMjJjdWkyazNqNzQwaG5qNDY3
NDQgMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw' title='alternate'></link><link rel='
self' type='application/atom+xml' href='http://www.google.com/calendar/feeds/24v
j3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/dgt40022cui2k3j
740hnj46744'></link><author><name>MS150 Training Schedule</name></author><gCal:s
endEventNotifications value='false'></gCal:sendEventNotifications></entry><entry

><id>http://www.google.com/cal

22:22:31.153097 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: . 2861:4291(1430) ack 360 win 6432
E...1#..2.I.H..c...e.P.......=.:P.. ....endar/feeds/24vj3m5pl125bh2ijbbneh953s%4
0group.calendar.google.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8</id><publishe
d>2007-06-11T15:08:23.000Z</published><updated>2007-06-11T15:10:39.000Z</updated
><category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.g
oogle.com/g/2005#event'></category><title type='text'>Meeting with Nicole</title

><summary type='html'>When: Mon Jun 4, 2007 10am to 11am&amp;nbsp; PDT&lt;br&gt;
  &lt;br&gt;Where: Conference Room B &lt;br&gt;Event Status:     confirmed</summ
ary><content type='text'>When: Mon Jun 4, 2007 10am to 11am&amp;nbsp; PDT&lt;br&
gt;  &lt;br&gt;Where: Conference Room B &lt;br&gt;Event Status:     confirmed

&lt;br&gt;Event Description: Discuss building cycling team for MS150</content><l
ink rel='alternate' type='text/html' href='http://www.google.com/calendar/event?
eid=NTFkOGtoNHMzYnBscW5iZjFscDZwMGtqcDggMjR2ajNtNXBsMTI1YmgyaWpiYm5laDk1M3NAZw'
title='alternate'></link><link rel='self' type='application/atom+xml' href='http
://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.calendar.goo
gle.com/public/basic/51d8kh4s3bplqnbf1lp6p0kjp8'></link><author><name>MS150 Trai
ning Schedule</name></author><gCal:sendEventNotifications value='false'></gCal:s
endEventNotifications></entry><entry><id>http://www.google.com/calendar/feeds/24
vj3m5pl125bh2ijbbneh953s%40group.calendar.google.com/public/basic/va41amq3r08dhh
kpm3lc1abs2o</id><published>20


22:22:31.190244 IP po-in-f99.google.com.80 > dellalicious.mshome.net.4520: P 4291:5346(1055) ack 360 win 6432
E..G1$..2.K.H..c...e.P.....<.=.:P.. ....07-06-11T15:10:08.000Z</published><updat
ed>2007-06-11T15:10:08.000Z</updated><category scheme='http://schemas.google.com
/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category><title ty
pe='text'>MS150 Information session</title><summary type='html'>When: Wed Jun 6,
 2007 4pm to Wed Jun 6, 2007 5pm&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Statu
s:     confirmed</summary><content type='text'>When: Wed Jun 6, 2007 4pm to Wed
Jun 6, 2007 5pm&amp;nbsp; PDT&lt;br&gt;   &lt;br&gt;Event Status:     confirmed<

/content><link rel='alternate' type='text/html' href='http://www.google.com/cale
ndar/event?eid=dmE0MWFtcTNyMDhkaGhrcG0zbGMxYWJzMm8gMjR2ajNtNXBsMTI1YmgyaWpiYm5la
Dk1M3NAZw' title='alternate'></link><link rel='self' type='application/atom+xml'
 href='http://www.google.com/calendar/feeds/24vj3m5pl125bh2ijbbneh953s%40group.c
alendar.google.com/public/basic/va41amq3r08dhhkpm3lc1abs2o'></link><author><name
>MS150 Training Schedule</name></author><gCal:sendEventNotifications value='fals
e'></gCal:sendEventNotifications></entry></feed>

Kết quả này bao gồm tất cả tiêu đề và nội dung HTTP, cũng như một số cờ TCP khó hiểu. Tất cả dữ liệu đều có ở đây, nhưng thật khó để đọc và hiểu. Có một số công cụ đồ hoạ giúp bạn xem dữ liệu này dễ dàng hơn.

WireShark (trước đây là Ethereal)

Chụp ảnh màn hình Wireshark
WireShark hiển thị lưu lượng truy cập mạng theo một số cách.

WireShark là một công cụ đồ hoạ được xây dựng bằng libpcap, thư viện mà tcpdump xây dựng, hoạt động và có sẵn trên Linux, Mac OS X và Windows. GUI của WireShark cho phép một số cách mới để diễn giải và tương tác với dữ liệu chụp gói. Ví dụ: khi gói được thu thập từ giao diện mạng, chúng sẽ hiển thị với nhiều màu sắc dựa trên giao thức mà các gói đang sử dụng. Bạn cũng có thể sắp xếp lưu lượng truy cập theo dấu thời gian, nguồn, đích và giao thức.

Nếu bạn chọn một hàng trong danh sách các gói, Wireshark sẽ hiển thị IP, TCP và thông tin cụ thể về giao thức khác trong tiêu đề gói trong một cây con có thể đọc được. Dữ liệu cũng xuất hiện ở dạng HEX và ASCII ở cuối màn hình.

Mặc dù tính chất hình ảnh của WireShark giúp lưu lượng truy cập mạng dễ hiểu hơn, bạn vẫn muốn lọc lưu lượng truy cập mạng trong hầu hết các trường hợp. WireShark có các tính năng lọc mạnh mẽ, bao gồm hỗ trợ cho hàng trăm giao thức.

LƯU Ý: Để xem các giao thức có sẵn và tạo bộ lọc phức tạp, hãy nhấp vào nút gần đầu cửa sổ WireShark.

Để tạo lại bộ lọc dùng trong ví dụ về tcpdump ở trên, bạn có thể chèn biểu thức sau vào hộp bộ lọc WireShark:

ip.addr==<your IP address> && tcp.port==80

Hoặc tận dụng kiến thức của WireShark về HTTP:

ip.addr==<your IP address> && http

Thao tác này sẽ lọc kết quả chụp ảnh của bạn chỉ theo các gói có liên quan đến tương tác này với máy chủ Lịch Google. Bạn có thể nhấp vào từng gói để xem nội dung và ghép các giao dịch với nhau.

MẸO: Bạn có thể nhấp chuột phải vào một trong các gói và chọn "Theo dõi Luồng TCP" để hiển thị tuần tự các yêu cầu và phản hồi trong một cửa sổ.

WireShark cung cấp một số cách để lưu thông tin ảnh chụp của bạn. Bạn có thể lưu một, một số hoặc tất cả các gói. Nếu đang xem luồng TCP, bạn chỉ cần nhấp vào nút "Save As" (Lưu dưới dạng) để chỉ lưu các gói có liên quan. Bạn cũng có thể nhập kết quả từ một ảnh chụp tcpdump và xem trong WireShark.

Vấn đề: SSL và mã hoá

Một thiếu sót phổ biến của công cụ thu thập gói dữ liệu là không thể xem dữ liệu đã được mã hoá qua kết nối SSL. Ví dụ ở trên truy cập vào nguồn cấp dữ liệu công khai, vì vậy SSL là không cần thiết. Tuy nhiên, nếu ví dụ này đã truy cập vào nguồn cấp dữ liệu riêng tư, thì ứng dụng cần phải xác thực bằng dịch vụ xác thực của Google. Dịch vụ này yêu cầu kết nối SSL.

Đoạn mã dưới đây cũng tương tự như ví dụ trước, nhưng ở đây, CalendarService yêu cầu nguồn cấp dữ liệu lịch của người dùng. Đây là một nguồn cấp dữ liệu riêng tư cần xác thực. Để xác thực, bạn chỉ cần gọi phương thức setUserCredentials. Phương thức này kích hoạt yêu cầu HTTPS tới dịch vụ ClientLogin và lấy mã xác thực từ phản hồi. Sau đó, đối tượng CalendarService sẽ bao gồm mã xác thực trong tất cả yêu cầu tiếp theo.

CalendarService myService = new CalendarService("exampleCo-fiddlerSslExample-1");
myService.setUserCredentials(username, userPassword);
final String METAFEED_URL = "http://www.google.com/calendar/feeds/default";
URL feedUrl = new URL(METAFEED_URL);
CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class);

System.out.println("Your calendars:");
for (int i = 0; i < resultFeed.getEntries().size(); i++) {
  CalendarEntry entry = resultFeed.getEntries().get(i);
  System.out.println("\t" + entry.getTitle().getPlainText());
}
System.out.println();

Xem xét lưu lượng truy cập mạng cần thiết để xác thực và truy cập vào nguồn cấp dữ liệu Google Data API riêng tư:

  1. Gửi thông tin xác thực của người dùng cho dịch vụ ClientLogin
    • Gửi một HTTP POST đến https://www.google.com/accounts/ClientLogin với các thông số sau trong nội dung thư:
      • Email – địa chỉ email của người dùng.
      • Passwd – mật khẩu của người dùng.
      • nguồn – xác định ứng dụng của bạn. Nên có dạng companyName-applicationName-versionID. Các ví dụ sử dụng tên ExampleCo-FiddlerSSLExample-1.
      • service – tên dịch vụ Lịch Google là 'cl'.
  2. Nhận mã uỷ quyền
    • Nếu yêu cầu xác thực không thành công, bạn sẽ nhận được mã trạng thái HTTP 403 Cấm.
    • Nếu thành công, phản hồi từ dịch vụ sẽ là một mã trạng thái HTTP 200 OK, cùng với ba mã dài gồm chữ và số trong phần nội dung của phản hồi: SID, LSIDAuth. Giá trị Auth là mã thông báo uỷ quyền.
  3. Yêu cầu siêu dữ liệu riêng tư trên lịch
    • Gửi một HTTP GET đến http://www.google.com/calendar/feeds/default với tiêu đề sau:
    • Authorization: GoogleLogin auth=<yourAuthToken>
      

Hãy thử chạy đoạn mã này và xem lưu lượng truy cập mạng trong WireShark (sử dụng "http || ssl" làm bộ lọc). Bạn sẽ thấy các gói SSL và TLS liên quan đến giao dịch, nhưng các yêu cầu và gói phản hồi ClientLogin được mã hóa trong các gói "Dữ liệu ứng dụng". Đừng lo, tiếp theo chúng ta sẽ xem xét một công cụ có thể thực sự tiết lộ thông tin đã mã hoá này.

Fiddler

Fiddler là một công cụ đánh dấu gói đồ họa khác, nhưng nó hoạt động khá khác so với các công cụ trình bày cho đến thời điểm này. Fiddler đóng vai trò là proxy giữa ứng dụng của bạn và dịch vụ từ xa mà bạn đang tương tác, qua đó trở thành người trung gian hiệu quả. Fiddler thiết lập kết nối SSL với cả ứng dụng và dịch vụ web từ xa, giải mã lưu lượng truy cập từ một điểm cuối, thu thập văn bản thuần tuý và mã hóa lại lưu lượng truy cập trước khi gửi đi. Rất tiếc, Fiddler chỉ có sẵn cho Windows-sorry cho tất cả người dùng Mac và Linux của bạn.

Lưu ý: Hỗ trợ SSL yêu cầu Fiddler phiên bản 2 và .NET Framework phiên bản 2.0.

Việc xem lưu lượng truy cập mạng trong Fiddler chủ yếu được thực hiện thông qua thẻ Trình kiểm tra phiên. Các thẻ phụ hữu ích nhất cho việc khắc phục các sự cố với API Dữ liệu của Google là:

  • Tiêu đề – hiển thị tiêu đề HTTP ở định dạng cây có thể thu gọn.
  • Xác thực – hiển thị tiêu đề Xác thực.
  • Thô – hiển thị nội dung của các gói mạng trong văn bản ASCII

MẸO: Nhấp vào biểu tượng ở góc dưới bên trái của cửa sổ Fiddler để bật và tắt tính năng chụp.

Fiddler sử dụng Khung .NET để định cấu hình kết nối mạng để sử dụng Fiddler làm proxy. Điều này có nghĩa là mọi kết nối bạn thực hiện với Internet Explorer hoặc với mã .NET sẽ xuất hiện trong Fiddler theo mặc định. Tuy nhiên, lưu lượng truy cập từ mẫu Java ở trên sẽ không hiển thị vì Java có một cách khác để thiết lập proxy HTTP.

Trong Java, bạn có thể đặt proxy HTTP bằng thuộc tính hệ thống. Fiddler chạy trên cổng 8888, do đó để cài đặt cục bộ, bạn có thể đặt mã Java sử dụng Fiddler làm proxy cho HTTP và HTTPS bằng cách thêm các dòng sau:

System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "localhost");
System.setProperty("https.proxyPort", "8888");

Nếu chạy mẫu với các dòng sau, bạn sẽ thực sự nhận được một dấu vết ngăn xếp khó chịu từ gói bảo mật Java:

[java] Caused by:
  sun.security.validator.ValidatorException: PKIX path building failed:
  sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Chụp ảnh màn hình Fiddler
Fiddler có thể giải mã và hiển thị lưu lượng truy cập SSL.

Lỗi này xảy ra khi không thể xác minh chứng chỉ được trả về từ máy chủ trong kết nối SSL. Trong trường hợp này, chứng chỉ không hợp lệ xuất phát từ Fiddler, đóng vai trò là người trung gian. Fiddler tạo chứng chỉ nhanh chóng và vì Fiddler không phải là nhà phát hành đáng tin cậy nên các chứng chỉ này sẽ khiến Java không thiết lập được kết nối SSL.

Lưu ý: Khi Fiddler đang chạy, mọi kết nối SSL bạn thực hiện trong Internet Explorer sẽ kích hoạt "Cảnh báo bảo mật" hỏi xem bạn có muốn tiếp tục dù có chứng chỉ phác thảo hay không. Bạn có thể nhấp vào 'Xem chứng chỉ' để xem chứng chỉ mà Fiddler tạo ra.

Vậy bạn có thể làm gì để vượt qua ngoại lệ về bảo mật này? Về cơ bản, bạn cần định cấu hình lại khung bảo mật của Java để tin tưởng tất cả chứng chỉ. May mắn là bạn không cần phải tự tạo ra bánh xe ở đây, hãy xem giải pháp củarancis Labrie và thêm phương thức SSLUtilities.trustAllHttpsCertificates() vào ví dụ ở trên.

Sau khi định cấu hình Java để sử dụng Fiddler làm proxy và tắt tính năng xác minh chứng chỉ mặc định, bạn có thể chạy ví dụ này và xem tất cả lưu lượng truy cập được gửi qua dây ở dạng văn bản thuần tuý. Đừng đánh cắp mật khẩu của tôi!

Hãy nhớ rằng, giao dịch xác thực này chỉ là một ví dụ nhỏ về lưu lượng truy cập SSL. Một số ứng dụng web chỉ sử dụng kết nối SSL, vì vậy gỡ lỗi lưu lượng truy cập HTTP là không cần thiết mà không có cách để giải mã dữ liệu.

Kết luận

tcpdump có sẵn trên Linux, Mac OS X và Windows, là một công cụ tuyệt vời khi bạn biết những gì mình đang cần và chỉ cần chụp nhanh. Tuy nhiên, có một số công cụ đồ hoạ trình bày lưu lượng truy cập mạng ở định dạng dễ hiểu hơn. tcpdump có nhiều tuỳ chọn và khả năng lọc hơn so với những công cụ đã đề cập ở đây. Để xem mô tả đầy đủ về chức năng của tcpdump, hãy nhập "man tcpdump" hoặc truy cập vào trang tcpdump man trên mạng.

WireShark cũng có trên Linux, Mac OS X và Windows. Tích hợp sẵn hàng trăm giao thức giúp WireShark trở thành một công cụ hữu ích cho nhiều ứng dụng chứ không chỉ gỡ lỗi HTTP. Phần giới thiệu này hầu như không đề cập đến những tính năng của WireShark. Để biết thêm thông tin, hãy nhập "man wirehark" hoặc truy cập vào trang web của WireShark.

Fiddler cũng có nhiều tính năng tuyệt vời, nhưng điều làm nên sự khác biệt là khả năng giải mã lưu lượng truy cập SSL. Để biết thêm thông tin, hãy truy cập vào trang web của Fiddler2.

Các ứng dụng đánh giá gói này là công cụ tuyệt vời trong thanh công cụ của bạn và độc giả quan sát sẽ nhận thấy tất cả đều miễn phí! Lần tới khi làm việc với các API của Google và bạn thấy điều gì đó đáng ngờ, hãy rút ra một trong những bộ phân tích mạng này và xem xét kỹ hơn những gì trên dây. Nếu không tìm thấy vấn đề, bạn luôn có thể đăng câu hỏi lên nhóm thảo luận của chúng tôi. Việc thêm thông báo có liên quan đến mạng sẽ giúp người khác hiểu và chẩn đoán vấn đề cụ thể của bạn.

Chúc bạn may mắn và ngủ ngon!

Tài nguyên