private/Set-OpenSslTestEnvironment.ps1

function Set-OpenSslTestEnvironment {
    <#
    .SYNOPSIS
        Prepare OpenSSL config directory for tests and unset OPENSSL_CONF.
    .PARAMETER
        PhpBinDirectory
        PHP bin directory
    #>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true, Position=0, HelpMessage='PHP bin directory')]
        [ValidateNotNull()]
        [ValidateLength(1, [int]::MaxValue)]
        [string] $PhpBinDirectory
    )
    process {
        foreach ($dir in @('C:\OpenSSL-Win32','C:\OpenSSL-Win64')) {
            Remove-Item -LiteralPath $dir -Recurse -Force -ErrorAction SilentlyContinue
        }

        $opensslDir = if ([System.Environment]::Is64BitOperatingSystem) {
            if ([System.Environment]::Is64BitProcess) {
                'C:\Program Files\Common Files\SSL'
            } else {
                'C:\Program Files (x86)\Common Files\SSL'
            }
        } else {
            'C:\Program Files\Common Files\SSL'
        }

        if ($env:GITHUB_ACTIONS -and $env:GITHUB_ACTIONS.ToString().ToLower() -eq 'true') {
            Remove-Item -LiteralPath $opensslDir -Recurse -Force -ErrorAction SilentlyContinue
        }

        New-Item -ItemType Directory -Force -Path $opensslDir | Out-Null

        if (-not $env:DEPS_DIR) {
            throw 'DEPS_DIR is not set.'
        }
        $source = Join-Path $env:DEPS_DIR 'template\ssl\openssl.cnf'
        if (-not (Test-Path -LiteralPath $source)) {
            throw "openssl.cnf not found at $source"
        }
        Copy-Item -LiteralPath $source -Destination $opensslDir -Force
        $Env:OPENSSL_CONF = "$PhpBinDirectory\extras\ssl\openssl.cnf"
    }
}