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

在 NuGet 还原期间使用自签名 SSL 证书并显示“无法获取本地颁发者证书”时,Azure 开发运营服务器管道生成失败

高茂
2023-03-14

升级到Azure DevOps Server 2019后,自动管道构建在NuGet恢复步骤失败,显示:

错误:错误:无法获取本地颁发者证书

包无法恢复

Microsoft的留档声明在Windows上运行的构建代理使用Windows证书存储,因此我检查了所需的证书是否正确安装在构建服务器上,但它仍然失败。

有许多症状相似但原因不同的问题。经过调查,我已经找到了解决办法,但我在这个问题上没有发现任何东西,所以我会发布一个答案,希望能为其他人节省一些时间!

共有3个答案

郎磊
2023-03-14

我从@alifen格式化了PowerShell脚本。下面的脚本可以在构建代理本身上执行。它接受目标路径的参数并在服务器上设置环境变量。

信用@alifen


[CmdletBinding()]
param (
    [Parameter()]
    [string]
    $TargetFolder = "$env:SystemDrive\Certs"
)
If (-not(Test-Path $TargetFolder))
{
    $null = New-Item -ItemType Directory -Path $TargetFolder -Force
}
# Loop through each CA in the machine store
Get-ChildItem -Path Cert:\LocalMachine\CA | ForEach-Object {

    # Convert cert's bytes to Base64-encoded text and add begin/end markers
    $Cert = "-----BEGIN CERTIFICATE-----`n"
    $Cert += $([System.Convert]::ToBase64String($_.export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert), 'InsertLineBreaks'))
    $Cert += "`n-----END CERTIFICATE-----`n"

    # Append cert to chain
    $Chain += $Cert
}

# Build target path
$CertFile = "$TargetFolder\TrustedRootCAs.pem"

# Write to file system
Write-Host "[$($MyInvocation.MyCommand.Name)]: Exporting certs to: [$CertFile]"
$Chain | Out-File $CertFile -Force -Encoding ASCII

# Set Environment variable
Write-Host "[$($MyInvocation.MyCommand.Name)]: Setting environment variable [NODE_EXTRA_CA_CERTS] to [$CertFile]"
[Environment]::SetEnvironmentVariable("NODE_EXTRA_CA_CERTS", "$CertFile", "Machine")

公西天逸
2023-03-14

事实证明,Azure运营模式生成代理正在使用不使用Windows证书存储的Node.js版本。

所需的解决方案是将Node.js指向导出的副本(*。cer文件),使用名为< code>NODE_EXTRA_CA_CERTS的系统环境变量或名为< code>NODE的任务变量。EXTRA.CA.CERTS,其值指向证书。

开发者社区问题链接

施飞昂
2023-03-14

我将PowerShell代理作业与以下脚本一起使用。这有效地为节点提供了“使用Windows计算机证书存储”选项。管道JS。

一些注意事项:

>

  • 监控节点。exe with ProcMon建议每次运行管道时读取NODE_EXTRA_CA_CERTS中引用的文件。然而,其他人建议运行Restart Service vstsagent*-需要强制才能执行更改。这不是我的经验,但可能是环境不同导致了这种行为。

    这增加了大约1秒的流水线执行时间。对于“为Windows上管道中的节点设置并忘记证书管理”来说,这可能是一个可接受的价格,但仍然值得注意。

    # If running in a pipeline then use the Agent Home directory,
    # otherwise use the machine temp folder which is useful for testing
    if ($env:AGENT_HOMEDIRECTORY -ne $null) { $TargetFolder = $env:AGENT_HOMEDIRECTORY }
    else { $TargetFolder = [System.Environment]::GetEnvironmentVariable('TEMP','Machine') }
    
    # Loop through each CA in the machine store
    Get-ChildItem -Path Cert:\LocalMachine\CA | ForEach-Object {
    
        # Convert cert's bytes to Base64-encoded text and add begin/end markers
        $Cert = "-----BEGIN CERTIFICATE-----`n"
        $Cert+= $([System.Convert]::ToBase64String($_.export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert),'InsertLineBreaks'))
        $Cert+= "`n-----END CERTIFICATE-----`n"
    
        # Append cert to chain
        $Chain+= $Cert
    }
    
    # Build target path
    $CertFile = "$TargetFolder\TrustedRootCAs.pem"
    
    # Write to file system
    $Chain | Out-File $CertFile -Force -Encoding ASCII
    
    # Clean-up
    $Chain = $null
    
    # Let Node (running later in the pipeline) know from where to read certs
    Write-Host "##vso[task.setvariable variable=NODE.EXTRA.CA.CERTS]$CertFile"
    

  •  类似资料:
    • 我有一个问题...我在Gitlab中的代码,Azure运营模式下的管道。我使用经典编辑器。当我启动管道时,我有错误"致命:无法访问'致命:无法访问'https://my.repos.example:***. git/': SSL证书问题:无法获得本地颁发者证书"请帮帮我!

    • 我正在Windows服务器2016上的wamp上使用洋红色社区版2.2。每当我尝试登录以通过系统同步您的Magento市场购买时 “SSL 证书问题:无法获取本地颁发者证书” 我尝试了这个论坛中其他一些线程中提供的解决方案来下载cacert。pem并在php.ini中执行以下设置 curl . cainfo = " C:\ wamp 64 \ bin \ PHP \ PHP 7 . 1 . 9 \

    • 我正在Windows7上运行PHP版本5.6.3作为XAMPP的一部分。 当我尝试使用Mandrill API时,我得到以下错误: 未捕获异常“Mandrill_HttpError”,消息为“API调用消息/send-template失败:SSL证书问题:无法获取本地颁发者证书” 我已经尝试了在StackOverflow上读到的所有内容,包括向php.ini文件添加以下内容: 当然可以从http:

    • 问题内容: 我正在Windows 7上将PHP版本5.6.3作为XAMPP的一部分运行。 当我尝试使用Mandrill API时,出现以下错误: 消息“ API调用消息/发送模板失败”的未捕获异常“ Mandrill_HttpError”:SSL证书问题:无法获取本地颁发者证书 我已经尝试了我在StackOverflow上阅读的所有内容,包括将以下内容添加到php.ini文件中: 当然,还可以从h

    • 我使用MAMP作为本地开发环境。我想实现一个谷歌认证-但不断得到这个SSL错误。 < li >正如其他SO主题所建议的,我已经在我的PHP.ini文件中添加了这行代码: 知道如何在我的本地环境中传递这个SSL错误吗? 这是代码:

    • 您好,我在构建python映像时遇到问题 错误说, 但是当升级pip时,同样的错误显示。 错误:由于环境原因无法安装程序包错误:HTTPSConnectionPool(host='files.pythonhosted.org',port=443):url超过最大重试次数:/packages/ac/cf/0cc542fc93de2f3b9b53cb979c7d118cffb93204afb4629a