2017-01-12 13 views
40

Tôi đang cố gắng để thực hiện lệnh này powershellPowershell Invoke-WebRequest Không với SSL/TLS an toàn Kênh

Invoke-WebRequest -Uri https://apod.nasa.gov/apod/

và tôi nhận được lỗi này. "Invoke-WebRequest: Yêu cầu bị hủy: Không thể tạo kênh bảo mật SSL/TLS." yêu cầu https dường như hoạt động ("https://google.com") nhưng không phải là yêu cầu này. Làm thế nào tôi có thể làm điều này để làm việc hoặc sử dụng lệnh powershell khác để đọc nội dung trang?

Trả lời

93

hãy thử sử dụng này một

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/ 
+2

hoạt động! Bạn có thể giải thích cho tôi tại sao không? – hewstone

+5

Theo powerhell mặc định sử dụng TLS 1.0, bảo mật trang web yêu cầu TLS 1.2 – crowchirp

+1

Awh, Làm cách nào bạn xác định phiên bản TLS của trang web? – hewstone

21

Trong một nỗ lực không biết xấu hổ để ăn cắp một số phiếu, SecurityProtocol là một Enum với thuộc tính [Flags]. Vì vậy, bạn có thể làm điều này:

[Net.ServicePointManager]::SecurityProtocol = 
    [Net.SecurityProtocolType]::Tls12 -bor ` 
    [Net.SecurityProtocolType]::Tls11 -bor ` 
    [Net.SecurityProtocolType]::Tls 

Hoặc vì đây là PowerShell, bạn có thể để cho nó phân tích một chuỗi cho bạn:

[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls" 

Sau đó, bạn không kỹ thuật cần biết phiên bản TLS.

Tôi đã sao chép và dán đoạn mã này từ tập lệnh mà tôi đã tạo sau khi đọc câu trả lời này vì tôi không muốn chuyển qua tất cả các giao thức có sẵn để tìm một giao thức hoạt động. Tất nhiên, bạn có thể làm điều đó nếu bạn muốn.

+0

Nếu bạn cần truy cập một trang web sử dụng SSLv3, thì bạn sẽ muốn '[Net.ServicePointManager] :: SecurityProtocol =" Tls12, Tls11, Tls, Ssl3 "'. Hãy nhớ rằng SSLv3 và TLSv1.0 đã không được chấp nhận do POODLE, do đó hãy tự chịu rủi ro. – jordanbtucker

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