You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell的FtpWebRequest中永久接受证书

解决PowerShell中FTP over SSL证书接受提示问题

我来帮你搞定这个证书弹窗的问题!在PowerShell里,你可以直接复用C#中[System.Net.ServicePointManager]::ServerCertificateValidationCallback的解决方案,只需要用PowerShell脚本块来实现回调逻辑就好。

修改后的完整代码

function Create-FtpDirectory {
    param(
        [Parameter(Mandatory=$true)]
        [string] $sourceuri,
        [Parameter(Mandatory=$true)]
        [string] $username,
        [Parameter(Mandatory=$true)]
        [string] $password
    )

    # 设置证书验证回调,自动接受所有证书(仅建议测试环境使用)
    [System.Net.ServicePointManager]::ServerCertificateValidationCallback = { $true }

    if ($sourceUri -match '\\$|\\\w+$') {
        throw 'sourceuri should end with a file name'
    }
    $ftprequest = [System.Net.FtpWebRequest]::Create($sourceuri);
    Write-Information -MessageData "Create folder to store backup (Get-FolderName -Path $global:backupFolder)"
    $ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::MakeDirectory
    $ftprequest.UseBinary = $true
    $ftprequest.Credentials = New-Object System.Net.NetworkCredential($username,$password)
    $ftprequest.EnableSsl = $true
    $response = $ftprequest.GetResponse();
    Write-Host "Folder created successfully, status $response.StatusDescription"
    $response.Close();

    # 可选:重置回调为默认值,避免影响其他网络请求的安全性
    [System.Net.ServicePointManager]::ServerCertificateValidationCallback = $null
}

关键说明

  1. 自动接受证书的逻辑:
    脚本块{ $true }会让PowerShell自动接受所有服务器返回的证书,直接跳过证书验证弹窗。但要注意:这种方式会完全绕过证书安全性检查,只适合你完全信任的测试环境。

  2. 生产环境的安全验证方式:
    如果是生产环境,你应该在回调中添加具体的证书验证逻辑,比如检查证书的哈希值、颁发机构等,确保连接的服务器是合法的。示例如下:

    [System.Net.ServicePointManager]::ServerCertificateValidationCallback = {
        param($sender, $certificate, $chain, $sslPolicyErrors)
        # 替换为你的目标服务器证书的哈希值(可通过证书查看器获取)
        $trustedCertHash = "A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0"
        # 验证证书哈希是否匹配,同时忽略可接受的错误(比如自签名证书的链错误)
        return ($certificate.GetCertHashString() -eq $trustedCertHash) -or ($sslPolicyErrors -eq [System.Net.Security.SslPolicyErrors]::RemoteCertificateChainErrors)
    }
    

    这里的回调参数分别是:

    • $sender:发起请求的对象(这里是FtpWebRequest)
    • $certificate:服务器返回的SSL证书
    • $chain:证书链信息
    • $sslPolicyErrors:验证过程中遇到的错误
  3. 回调的作用范围:
    如果你把回调设置放在函数内部,只会影响当前函数的请求;如果放在函数外部,会对后续所有HTTPS/FTP over SSL请求生效。使用完毕后建议重置为$null,避免影响其他请求的安全验证。

内容的提问来源于stack exchange,提问作者Toan Lu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:53:06