Ошибка Powershell wget: не удалось создать безопасный канал SSL / TLS [дублировать]

Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:

String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
116
задан PolinaC 30 November 2017 в 05:51
поделиться

2 ответа

попробуйте использовать этот

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
198
ответ дан crowchirp 16 August 2018 в 02:30
поделиться
  • 1
    это работает! Можете ли вы объяснить мне, почему? – hewstone 12 January 2017 в 18:05
  • 2
    По умолчанию powershell использует TLS 1.0 для обеспечения безопасности сайта TLS 1.2 – crowchirp 12 January 2017 в 18:05
  • 3
    Awh, Как вы определили версию сайта TLS? – hewstone 12 January 2017 в 18:08
  • 4
    Попробуйте SSLLabs для определения информации: Отчет SSL: apod.nasa.gov показывает TLS1.1 и TLS1.2 – Christopher G. Lewis 12 January 2017 в 19:00
  • 5
    @hewstone После того, как вы путешествуете в будущее, есть способ сортировать ответ на свой вопрос, который вы подразумеваете. IOW Как я могу заставить Invoke-WebRequest работать независимо от конфигурации назначения? – No Refunds No Returns 30 December 2017 в 04:01
  • 6
    – Franklin Yu 23 September 2018 в 05:15

В бесстыдной попытке украсть некоторые голоса SecurityProtocol является Enum с атрибутом [Flags]. Таким образом, вы можете сделать это:

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

Или, поскольку это PowerShell, вы можете позволить ему разобрать строку для вас:

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

Тогда вам не требуется технически знаю версию TLS.

Я скопировал и вставил это из сценария, который я создал после прочтения этого ответа, потому что я не хотел перебирать все доступные протоколы, чтобы найти тот, который работал. Конечно, вы могли бы сделать это, если хотите.

Заключительное примечание. У меня есть исходный (минус SO редактирует) оператор в моем профиле PowerShell, так что он находится в каждом сеансе, который я запускаю Теперь. Это не совсем безопасно, так как все еще есть некоторые сайты, которые просто терпят неудачу, но я уверен, что сообщение, о котором идет речь, реже.

65
ответ дан No Refunds No Returns 16 August 2018 в 02:30
поделиться
  • 1
    Если вам нужно получить доступ к сайту, использующему SSLv3, вам понадобится [Net.ServicePointManager]::SecurityProtocol = "Tls12, Tls11, Tls, Ssl3". Помните, что SSLv3 и TLSv1.0 устарели из-за POODLE, поэтому используйте их на свой страх и риск. – jordanbtucker 1 March 2018 в 20:43
  • 2
  • 3
    – No Refunds No Returns 24 October 2018 в 15:35
Другие вопросы по тегам:

Похожие вопросы: