在 Invoke-WebRequest 调用中信任自签名证书

Pax*_*axz 3 powershell https ssl-certificate powershell-core

有没有一种方法可以调用Invoke-WebRequest,例如期望证书的给定公钥来验证我信任连接?

如果没有,是否有另一种方法来调用 webrequest 并且只信任网页而不信任颁发者或忽略证书检查?

问题

我想加载一个带有Invoke-WebRequest. 我尝试通过 https 连接到网页,服务器提供了自签名证书。

由于我的证书存储中没有颁发者证书Invoke-WebRequest会抛出错误:

Invoke-WebRequest :根据验证程序,远程证书无效。

已知的解决方法

  1. 使用-SkipCertificateCheckPowershell v6.0.0 ref 中添加的-Switch
  2. 添加新的 Certificatepolicy 以信任所有证书引用
  3. 信任颁发者证书

我尝试过但没有成功

  1. 将网页证书添加到证书库而不信任颁发者证书
  2. 将网页证书添加到证书存储并使用-Certificate-Parameter ofInvoke-WebRequest指定此证书

PS:由于这个问题出现在 Powershell <5 和 Powershell Core 中,我将两者都标记了。

HAL*_*256 6

简短的回答,不,你绕不开它,当涉及到证书时,甚至不要尝试。客户端将首先查看证书和整个证书链,看看它是否可信。如果该链的任何部分(例如发行者)不受信任,则它不受信任。如果这个基本事实没有发生,那么就没有办法撤销证书。

对于自签名证书,由于它们不受信任,您是对的,客户端实际上只有 2 个选项:

  1. 忽略证书来源,盲目使用-SkipCertificateCheck交换机连接。
  2. 接受发行者和全链可以信任并导入证书

你无法绕过这个基本事实。我喜欢使用这个例子:自签名证书就像向客户交付一个炸弹形状的物体,上面贴着一张贴纸,上面写着“不是炸弹 - 相信我,我是@Paxz”。证书链就像拿着炸弹形状的物体,你看着送货司机,他们看起来很阴暗,同时看起来一点也不像@Paxz。然后,您可以选择忽略贴纸,或者接受我可以信任 @Paxz 和阴暗的送货司机。未经明确同意,您不能直接将包裹推过前门。当您信任整个链条时,贴纸上会写着“不是炸弹 - 相信我,我已经通过炸弹专家验证”,因为您信任炸弹专家,客户会毫无疑问地接受包裹。