Không thể NHẬN tài nguyên bằng openssl s_client


0

Tôi đã thử làm theo lệnh openssl s_client -connect google.com:443và có thể kết nối với google.com qua SSL.

Nhưng khi tôi cố gắng để có được một số tài nguyên bằng cách sử dụng GET /?q=cats HTTP/1.1 <enter> Host google.com <enter><enter>thì tôi nhận được thông báo dưới đây:

HTTP/1.1 400 Bad Request
Date: Wed, 19 Aug 2015 21:12:02 GMT
Server: Apache
Content-Length: 307
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
Request header field is missing ':' separator.<br />
<pre>
Host google.com</pre>
</p>
</body></html>
closed

Nếu tôi không chỉ định bất kỳ phiên bản HTTP nào và sử dụng GET /?q=cats <enter>thì tôi nhận được phản hồi bên dưới. Trong phản hồi tôi có thể thấy URL chính xác https://www.google.co.in/?q=cats&gws_rd=cr&ei=yPPUVYeVApGzuATIkpuQCwvà nếu tôi sử dụng tương tự trong trình duyệt thì nó hoạt động.

Tôi có thiếu một số tiêu đề hay cái gì khác không?

HTTP/1.0 302 Found
Location: https://www.google.co.in/?q=cats&gws_rd=cr&ei=yPPUVYeVApGzuATIkpuQCw
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Date: Wed, 19 Aug 2015 21:23:20 GMT
Server: gws
Content-Length: 273
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1440019400:LM=1440019400:V=1:S=fdzyHaeMMBcBYPPy; expires=Fri, 18-Aug-2017 21:23:20 GMT; path=/; domain=.google.com
Set-Cookie: NID=70=Xxap0a_fYjPIwnvwUuyUqKaT6UH6ZjttA6zv6CYv8qVGMCuOEyNRc8hR2JCi1X_8522QMF2OpsG9dDrWphQh-df0orBmG-DC0WCTF9A_YVJYp3YSgQyap5GlL11EBjff; expires=Thu, 18-
Feb-2016 21:23:20 GMT; path=/; domain=.google.com; HttpOnly
Alternate-Protocol: 443:quic,p=1
Alt-Svc: quic=":443"; p="1"; ma=604800

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.in/?q=cats&amp;gws_rd=cr&amp;ei=yPPUVYeVApGzuATIkpuQCw">here</A>.
</BODY></HTML>
read:errno=0

Một loại phản ứng 302.

**GET / HTTP/1.1
Host: www.google.com**

HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: https://www.google.co.in/?gfe_rd=cr&ei=7_3UVfDeCuPI8AeMkZzwDQ
Content-Length: 262
Date: Wed, 19 Aug 2015 22:06:39 GMT
Server: GFE/2.0
Alternate-Protocol: 443:quic,p=1
Alt-Svc: quic=":443"; p="1"; ma=604800

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="https://www.google.co.in/?gfe_rd=cr&amp;ei=7_3UVfDeCuPI8AeMkZzwDQ">here</A>.
</BODY></HTML>

Tại sao bạn nghĩ rằng điều này có liên quan đến infosec? Đối với tôi có vẻ như vấn đề liên quan đến API chứ không phải việc bạn sử dụng SSL.
Neil Smithline

@NeilSmithline Sau đó, trang web SO nào bạn nghĩ sẽ phù hợp để đưa ra câu hỏi này? Đây là nơi mọi người sẽ biết nhiều hơn về giao tiếp SSL và tất cả ...

Tôi chỉ hỏi tại sao bạn nghĩ rằng điều này có liên quan đến bảo mật. Có vẻ như bạn nghĩ rằng SSL là vấn đề. Tôi chỉ hỏi tại sao.
Neil Smithline

Đồng ý. Vấn đề không phải là SSL mà liên quan đến giao tiếp SSL.

Câu trả lời:


5

Khi Google nói

Request header field is missing ':' separator.

Điều họ thực sự muốn nói là trường tiêu đề trong yêu cầu cần sử dụng dấu phân cách ':'.

Vì vậy, thay vì gửi này:

GET /?q=cats HTTP/1.1<enter> 
Host google.com<enter>
<enter>

Bạn cần gửi cái này:

GET /?q=cats HTTP/1.1<enter> 
Host: google.com<enter>
<enter>

(Lưu ý: tách "Máy chủ" và "google.com")

Khi đã hết cách, bạn nhận được 302:

HTTP/1.0 302 Found
Location: https://www.google.co.in/?q=cats&gws_rd=cr&ei=yPPUVYeVApGzuATIkpuQCw

Tôi thực sự nhận được 301 theo cùng một yêu cầu:

HTTP/1.1 301 Moved Permanently
Location: https://www.google.com/?q=cats

Đây không phải là phản hồi lỗi, chúng là phản ứng chuyển hướng. Google đã nghe yêu cầu của chúng tôi và muốn chúng tôi yêu cầu lại theo cách khác. Trong trường hợp của tôi, nó nói với tôi rằng tôi không nên hỏi "google.com", tôi nên hỏi "www.google.com" và tôi nên ghi nhớ điều đó cho lần sau. Trong trường hợp của bạn, nó muốn bạn truy cập www.google.co.in và sử dụng một chuỗi truy vấn khác - có lẽ bạn đang ở Ấn Độ và họ muốn bạn truy cập phiên bản địa phương của Google. Đối với việc bạn muốn sử dụng một chuỗi truy vấn khác, thì đó là các tham số chuỗi truy vấn Google (gws_rd, ei) bình thường; họ chỉ làm gọn gàng truy vấn của bạn cho bạn.

Đây là hành vi ứng dụng web bình thường. Bạn tạo một truy vấn bằng tay. Ứng dụng web (Google) không thích một số khía cạnh nhất định trong truy vấn của bạn và viết lại nó để phù hợp hơn với những gì đã xảy ra nếu bạn vào một trình duyệt thông thường và tìm kiếm "mèo". Sau đó, họ đã trao URL mới này cho khách hàng của bạn (openssl trong trường hợp này) và bảo nó đi hỏi lại. Nhưng vì bạn đang làm điều này bằng tay, bạn đã không hỏi lại, và thay vào đó bạn hiểu sai nó là một điều kiện lỗi.

Nếu tôi làm như họ yêu cầu và lặp lại truy vấn của mình nhưng Host: www.google.comthay vì Host: google.com, tôi sẽ nhận được kết quả mà bạn mong đợi nếu bạn đang tìm kiếm mèo.


Bắt tốt, cảm ơn. Nhưng nó vẫn không hoạt động. Tôi nhận được lỗi 302, tương tự như tôi đặt trong phần cuối của câu hỏi.
hagrawal

@hagrawal, được cập nhật thành địa chỉ - về cơ bản, 302 không phải là lỗi, đó là một gợi ý hữu ích từ ứng dụng.
gowenfawr

Cảm ơn cậu. Tuy nhiên tôi đã có thể nhận được phản hồi Host: google.co.in, không cần www vì tôi nghĩ rằng nếu tên miền được giải quyết thì nó được cho là bởi openssl rằng đó sẽ là yêu cầu web trên toàn thế giới.
hagrawal

@hagrawal: Không, OpenSSL không có bất cứ điều gì với "yêu cầu web trên toàn thế giới" và web không quan tâm liệu tên miền có wwwhay không.
grawity
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.