используя цифровой сертификат в Пентахо - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно позвонить на мыльный веб-сервис, но когда я попробую сделать поиск, ложка выдаст следующее сообщение

error when I click on load button

Я уже установил цифровой сертификат на мою машину, у меня есть архив .cer.Я не знаю, как поместить этот сертификат в мою трансформацию.

1 Ответ

0 голосов
/ 29 ноября 2018

У меня тоже была эта проблема - и это сложно понять.Поскольку PDI является приложением Java, оно не очень хорошо сочетается со встроенными в операционную систему процессами управления сертификатами или параметрами, позволяющими игнорировать проверку сертификатов.Хитрость заключается в том, чтобы добавить сертификат в хранилище ключей Java, используя keytool

. Мне пришлось решить эту проблему для Windows, так что вот сценарий PowerShell, но вы должны быть в состоянии адаптировать идею для оболочки при необходимости.Кроме того, пароль по умолчанию для хранилища сертификатов Java - «changeit» - это не type-o или заполнитель.

Param (
    [Parameter(
        Mandatory = $False,
        ValueFromPipeline = $False,
        ValueFromPipelineByPropertyName = $False,
        HelpMessage = 'Take action!')]
    [switch]$doit
)

## Find the JRE folders
$jre_list = New-Object System.Collections.Generic.List[System.Object];
$program_folders = @('C:\Program Files\Java', 'C:\Program Files (x86)\Java');
ForEach ($folder in $program_folders) {
    $jre_folders = Get-ChildItem -Path $folder -ErrorAction SilentlyContinue | Where-Object {$_.Name -like 'jre*'};
    ForEach ($jre in $jre_folders) {
        if ((Get-ChildItem -Path $($jre.FullName) -Recurse -Filter 'keytool.exe').Count -gt 0) {
            $jre_list.Add($jre);
        }
    }
}

## Find the certificate files
$certroot = $PSScriptRoot;
$cert_files = Get-ChildItem -Path $certroot | Where-Object {$_.Name -match '^.+\.crt$' };

ForEach ($jre in $jre_list) {
    Write-Host "`n == Found JRE @ $($jre.FullName)";

    $keytool = "$($jre.FullName)\bin\keytool.exe";
    $keystore = "$($jre.FullName)\lib\security\cacerts";
    $cmd_list = "& '$keytool' -keystore '$keystore' -storepass changeit -list";
    $existing_trusts = (Invoke-Expression -Command $cmd_list).Replace('\n', '\r\n');

    ForEach ($cert in $cert_files) {
        $file = "$certroot\$cert";
        $alias = ($cert.Name).Replace('.crt', '');
        Write-Host "    >> $cert ($alias)";
        ForEach ($item in $existing_trusts) {
            $trust = $item.split(',')[0];
            if ($trust -match $alias -or $trust -match '*.my.domain.com') {
                if ($doit) {
                    ## Remove existing entries
                    Write-Host "       -- Removing entry for '$trust'";
                    $cmd_delete = ("& '$keytool' -keystore '$keystore' -storepass changeit -delete -alias $trust -noprompt").Replace("'", '"');
                    (Invoke-Expression -Command $cmd_delete -ErrorVariable stderr) 2>&1 | Out-Null
                    if (-Not $stderr) {
                        Write-Host '          Success';
                    }
                    Remove-Variable stderr -ErrorAction SilentlyContinue;
                }
                else {
                    Write-Host "       ++ Existing entry in keystore: '$trust'";
                }
            }
        }
        if ($doit) {
            ## Add new entries
            Write-Host "       ++ Adding entry for '$alias'";
            $cmd_add = ("& '$keytool' -keystore '$keystore' -storepass changeit -import -file '$file' -alias $alias -trustcacerts -noprompt").Replace("'", '"');
            (Invoke-Expression -Command $cmd_add -ErrorVariable stderr) 2>&1 | Out-Null
            if (-Not $stderr) {
                Write-Host '          Success';
            }
            Remove-Variable stderr -ErrorAction SilentlyContinue;
        }
    }
    Write-Host ' ';
}
...