このpowershellコマンドを実行しようとしています
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
そして私はこのエラーが出ます。 "Invoke-WebRequest:要求は中止されました。SSL/ TLSセキュアチャネルを作成できませんでした。" httpsリクエストは機能しているように見えますが( " https://google.com ")、これは問題ではありません。どうやってこれを機能させたり、他のpowershellコマンドを使ってページの内容を読むことができますか?
これを使ってみてください
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
いくつかの投票を盗むための恥知らずな試みでは、SecurityProtocol
は[Flags]
属性を持つEnum
です。だからあなたはこれを行うことができます:
[Net.ServicePointManager]::SecurityProtocol =
[Net.SecurityProtocolType]::Tls12 -bor `
[Net.SecurityProtocolType]::Tls11 -bor `
[Net.SecurityProtocolType]::Tls
またはこれはPowerShellなので、文字列を解析してもらうこともできます。
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
それならあなたは技術的にTLSのバージョンを知る必要はありません。
この回答を読んだ後に作成したスクリプトからこれをコピーして貼り付けました。使用可能なすべてのプロトコルを調べて、うまく機能するものを見つけたくなかったためです。もちろん、あなたが望むのであれば、couldにしてください。
最後の注意 - 私は自分のPowerShellプロファイルに元の(マイナスSO編集)ステートメントを持っているので、今から始めるすべてのセッションにそれがあります。ただ失敗するサイトがまだいくつかあるので、それは完全に絶対確実というわけではありませんが、私は確かに問題のメッセージをはるかに少ない頻度で見ます。
これは私のために働いた
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
わたしにはできる...
if (-not ([System.Management.Automation.PSTypeName]'ServerCertificateValidationCallback').Type)
{
$certCallback = @"
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public class ServerCertificateValidationCallback
{
public static void Ignore()
{
if(ServicePointManager.ServerCertificateValidationCallback ==null)
{
ServicePointManager.ServerCertificateValidationCallback +=
delegate
(
Object obj,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors errors
)
{
return true;
};
}
}
}
"@
Add-Type $certCallback
}
[ServerCertificateValidationCallback]::Ignore()
Invoke-WebRequest -Uri https://apod.nasa.gov/apod/
私のように、上記のどれもまったくうまくいかない場合は、下位のTLSバージョンのみを具体的に試してみる価値もあります。私は次の両方を試しましたが、問題を解決できなかったようです:
[Net.ServicePointManager]::SecurityProtocol = "tls12, tls11, tls"
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls
最終的には、TLS 1.0(具体的にはコードの1.1と1.2を削除する)をターゲットにしたときにのみ機能しました。
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls
ローカルサーバー(これが試行されていた)はTLS 1.2で問題ありませんが、リモートサーバー(以前はサードパーティによってTLS 1.2で「確認」されていた)はそうではないようです。
これが誰かを助けることを願っています。
理由はわかりませんが、.pfx
証明書を(現在のユーザーとローカルコンピュータの両方で)再インストールするとうまくいきます。