この質問は尋ねられて答えられたようですが、今のところ私が出会ったすべての解決策は役に立たない。 PowerShellスクリプトを作成して、REST APIを使用して使用情報を取得します。スクリプトは、サーバーと通信しようとするとすぐに壊れます。テストのために、非常に単純なコマンドを実行しています。 :
Invoke-RestMethod 'https://server:4443/login'
このエラーで戻ります:
Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.
同じコマンドを実行できますが、URL google.comを使用すると有効なリターンが得られるため、コマンドが一般的に機能していることがわかります。
サーバー自体で同等のcurlを実行すると、期待どおりに処理が完了します。 curlコマンドの詳細出力のスニペットを次に示します。
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using TLSv1.0 / DHE-RSA-AES256-SHA
* Server certificate:
* subject: CN=localhost
* start date: 2016-03-22 21:48:57 GMT
* expire date: 2026-03-20 21:48:57 GMT
* issuer: CN=localhost
* SSL certificate verify result: self signed certificate (18), continuing anyway.
これは、PowerShellが返すかなり一般的なエラーの検索に基づいた自己署名証明書の問題であると想定しています。
私はもう試した:
[Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
そして、運のない証明書の問題を無視するのに役立つ他の同様の方法(複雑な機能)。
それが役立つ場合に備えて、PowerShell 5を実行しています。
PowerShellコードにはまともですが、Invoke-RestMethodを試すのは初めてなので、何かが足りないかもしれません。どんな洞察も大歓迎です。
私は同じ問題を調査してきましたが、見つけた最高のリソースは次のブログ投稿でした:
http://huddledmasses.org/blog/validating-self-signed-certificates-properly-from-powershell/
これは、invoke-restmethod/webrequestを使用したpowershellの以降のバージョンでも機能します。ハンドラーをネイティブ.netとして実装することにより、実行スペースの要件を回避します。
if (-not("dummy" -as [type])) {
add-type -TypeDefinition @"
using System;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
public static class Dummy {
public static bool ReturnTrue(object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors) { return true; }
public static RemoteCertificateValidationCallback GetDelegate() {
return new RemoteCertificateValidationCallback(Dummy.ReturnTrue);
}
}
"@
}
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = [dummy]::GetDelegate()
お役に立てれば。