当前位置: 首页 > 知识库问答 >
问题:

调用重新启动方法-忽略自签名证书

步衡
2023-03-14

这个问题似乎已经被问到和回答了,但到目前为止,我遇到的每一个解决方案都没有帮助。我正在编写一个PowerShell脚本来运行一些RESTAPI以获取使用信息。我的脚本在尝试与服务器通信时立即中断。为了测试起见,我正在执行一个非常简单的命令:

Invoke-RestMethod 'https://server:4443/login'

它返回此错误:

Invoke-RestMethod : The underlying connection was closed: An unexpected error occurred on a send.

我可以运行相同的命令,但与URLgoogle.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代码很在行,但这是我第一次尝试调用RestMethod,所以可能我遗漏了一些东西。任何见解都值得赞赏。

共有3个答案

钱凌
2023-03-14

我知道这已经很老了,但当我问这个问题时,它还是出现了。谷歌优先权?

试试这个:

invoke-restMethod -SkipCertificateCheck -uri 'https://server:4443/login' -etc..etc..etc..

在这里通过谷歌:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/invoke-restmethod?view=powershell-6

令狐运珧
2023-03-14

如果在@x0n回答之后,您仍然存在问题,请尝试在请求之前添加/Rest此选项

[System.Net.ServicePointManager]::SecurityProtocol=[System.Net.SecurityProtocolType]::Tls12

我的工作脚本:

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
 }

[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::Tls12;
[ServerCertificateValidationCallback]::Ignore()

Invoke-WebRequest https://*YOUR URI*
古畅
2023-03-14

这也适用于具有invoke restmethod/webrequest的powershell的更高版本。它通过将处理程序实现为本机来避免对运行空间的需求。净:

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()

希望这有帮助。

 类似资料:
  • 问题内容: 我正在尝试 接受所有证书,和/或 使用 Apache HTTPClient 4.5版 接受自签名证书 (此处为教程链接) 我一直在从SO上的大量帖子中寻找解决此问题的方法。到目前为止,它们都没有起作用。 我不断收到此错误: Apache文件: Apache v4.5教程 SSL / TLS定制 Apache有版本3 的指南,但没有版本4的指南。 请注意,在所有这些示例中,我还传递了我之

  • null 忽略Apache HttpClient 4.3中的SSL证书 如何忽略Apache HttpClient 4.0中的SSL证书错误 使用Java忽略SSL证书错误 在使用Spring进行开发时需要信任所有证书 如何使用Apache HttpClient处理无效的SSL证书? 请注意,在所有这些示例中,我还传递了一个cookie存储区和一个我前面定义的代理凭据提供者。这些是工作的,我只是试

  • 问题内容: 给我 有没有办法禁用认证验证? 我正在使用Gitlab 8.13.1和gitlab-ci-multi-runner 1.11.2。 问题答案: 根据Wassim的答案以及有关tls- 自签名和自定义CA签名证书的gitlab文档 ,如果您不是gitlab服务器的管理员,而是运行者(以及运行者)的管理员,则可以节省一些时间以root身份运行): 更新1: 证书必须是正确位置的绝对路径。

  • 问题内容: 我正在使用Jersey客户端库针对在jboss上运行的rest服务运行测试。我使用自签名证书在服务器(在本地主机上运行)上设置了https。 但是,每当我使用https url运行测试时,都会出现以下错误: 我知道这是因为我的自签名证书不在Java密钥库中。有什么办法可以让我不检查ssl证书的有效性,而直接使用它呢? 这段代码只能在测试服务器上运行,因此,我不想在每次设置新的测试服务器

  • 问题内容: 我正在开发一个登录到本地无线路由器(Linksys)的小应用程序,但是我遇到了路由器的自签名ssl证书问题。 我运行wget 192.168.1.1并得到: 在节点中,捕获的错误是: 我当前的示例代码是: 我如何才能使node.js等效于“ –no-check-certificate”? 问题答案: 便宜又不安全的答案: 加 在代码中,调用之前 在此问题中回答了一种更安全的方法(上述解

  • 我们有一个使用Spring Boot JPA/Hibernate构建的服务。 我在不同的jars包中有两个同名的类。 使用Eclipse运行应用程序会导致重复导入问题,因此我在其中一个实体中添加了以下内容: 它解决了Eclipse中的问题,我可以很好地运行应用程序。但是,当使用java -jar运行Spring Boot生成的jar时,问题又回来了: 看起来@Entity(name)属性被完全忽略