Skip To Content

Tworzenie certyfikatu domeny

Oprogramowanie ArcGIS Enterprise wykorzystuje protokół HTTPS, który wymaga skonfigurowania certyfikatu w portalu. Począwszy od 2017 r., przeglądarka internetowa Chrome traktuje jako zaufane tylko te certyfikaty domeny, które zawierają parametr alternatywnej nazwy podmiotu (subject alternative name — SAN). Tego parametru nie można skonfigurować za pomocą samej aplikacji Menedżer usług IIS, co oznacza, że certyfikaty utworzone w ramach tej procedury wykonywania zadań nie są traktowane jako zaufane przez przeglądarkę Chrome.

W większości przypadków niezbędny certyfikat domeny udostępni administrator IT. Poniższy skrypt tworzy certyfikat zawierający nazwę SAN i eksportuje go z Menedżera usług IIS w formacie, który następnie można zaimportować w portalu.

Zapisanie i uruchomienie skryptu certyfikatu

Aby utworzyć certyfikat domeny, domena musi już mieć jednostkę certyfikującą, a na komputerze musi być zainstalowany Menedżer usług IIS. Zalecanym środowiskiem na potrzeby tej procedury wykonywania zadań jest aplikacja Windows PowerShell ISE, ponieważ udostępnia zarówno okno skryptu, jak i okno wiersza poleceń.

Jeśli certyfikat dla danej nazwy hosta istnieje na komputerze, skrypt spowoduje wyświetlenie pytania o chęć zastąpienia istniejącego certyfikatu.

  1. Otwórz aplikację Windows PowerShell ISE na komputerze za pomocą opcji Uruchom jako administrator i utwórz skrypt.
  2. Skopiuj poniższy tekst do okna skryptu tej aplikacji.
  3. Zapisz skrypt jako plik .ps1, taki jak certificateScript.ps1.
  4. Na panelu wiersza poleceń aplikacji ISE przejdź do katalogu, w którym skrypt został zapisany i uruchom skrypt .\certificateScript.ps1 w następujący sposób:

Skrypt certyfikatu do uruchomienia w aplikacji PowerShell

function New-CertificateRequest {
    param ( [string]$hostname )
 
    $CATemplate = "WebServer"
    $CertificateINI = "cert.ini"
    $CertificateREQ = "cert.req"
    $CertificateRSP = "cert.rsp"
    $CertificateCER = "cert.cer"
    $Subject = 'Subject="CN=' + $hostname + '"'
    $FriendlyName = 'FriendlyName=' + $hostname
    $SAN = '_continue_ = "dns=' + $hostname + '&"'
 
    ### INI file generation
    new-item -type file $CertificateINI -force
    add-content $CertificateINI '[Version]'
    add-content $CertificateINI 'Signature="$Windows NT$"'
    add-content $CertificateINI ''
    add-content $CertificateINI '[NewRequest]'
    add-content $CertificateINI $Subject
    add-content $CertificateINI 'Exportable=TRUE'
    add-content $CertificateINI 'KeyLength=2048'
    add-content $CertificateINI 'KeySpec=1'
    add-content $CertificateINI 'KeyUsage=0xA0'
    add-content $CertificateINI 'MachineKeySet=True'
    add-content $CertificateINI 'ProviderName="Microsoft RSA SChannel Cryptographic Provider"'
    add-content $CertificateINI 'ProviderType=12'
    add-content $CertificateINI 'SMIME=FALSE'
    add-content $CertificateINI 'RequestType=PKCS10'
    add-content $CertificateINI $FriendlyName
    add-content $CertificateINI '[Strings]'
    add-content $CertificateINI 'szOID_ENHANCED_KEY_USAGE = "2.5.29.37"'
    add-content $CertificateINI 'szOID_PKIX_KP_SERVER_AUTH = "1.3.6.1.5.5.7.3.1"'
    add-content $CertificateINI 'szOID_PKIX_KP_CLIENT_AUTH = "1.3.6.1.5.5.7.3.2"'
    add-content $CertificateINI 'szOID_SUBJECT_ALT_NAME2 = "2.5.29.17"'
    add-content $CertificateINI '[Extensions]'
    add-content $CertificateINI '2.5.29.17 = "{text}"'
    add-content $CertificateINI $SAN

 
    ### Certificate request generation
    if (test-path $CertificateREQ) {del $CertificateREQ}
    certreq -new $CertificateINI $CertificateREQ
 
    ### Online certificate request and import
    if ($OnlineCA) {
        if (test-path $CertificateCER) {del $CertificateCER}
        if (test-path $CertificateRSP) {del $CertificateRSP}
        certreq -submit -attrib "CertificateTemplate:$CATemplate" -config $OnlineCA $CertificateREQ $CertificateCER
        certreq -accept $CertificateCER
    }
    
    ### Delete certificate request files
    if (test-path $CertificateINI) {del $CertificateINI}
    if (test-path $CertificateREQ) {del $CertificateREQ}
    if (test-path $CertificateRSP) {del $CertificateRSP}
    if (test-path $CertificateCER) {del $CertificateCER}
}

## Main
if ($args.length -ne 0) {$hostname = $args[0]}
else {$hostname = "$env:computername.$env:userdnsdomain".ToLower()}

# Check if a CA exists in the domain and if IIS is installed
if (@(certutil -dump | select-string "Config:")) {
    $OnlineCA = (certutil -dump | select-string "Config:")[-1].Line.replace("``",'"').replace("'",'"').split('"')[1]
} else {
    Write-Host "Unable to determine certificate authority (CA) for this domain"
    Exit
}
if (-not @(Get-Service W3SVC -ErrorAction Ignore)) {
    Write-Host "IIS is not installed on this machine"
    Exit
}

# Check if a certificate already exists and prompt user to overwrite
if (@(Get-ChildItem cert:\LocalMachine\My | where-object { $_.FriendlyName -eq "$hostname" }).count -ne 0) {
    Write-Host "A certificate for $hostname already exists"
    $reply = Read-Host -Prompt "Overwrite existing certificate? (y/n)"
    if ( $reply -notmatch "[yY]" ) { Exit }
    Get-ChildItem cert:\LocalMachine\My | where-object { $_.FriendlyName -eq "$hostname" } | Remove-Item
}
New-CertificateRequest -hostname $hostname > $null
Write-Host "`nCreated a new certificate for $hostname"

# Create https binding if necessary and add new cert to https binding
import-module WebAdministration
if (@(Get-WebBinding -name "Default Web Site" | Where-Object {$_.protocol -eq "https"}).count -eq 0) {
    New-WebBinding -name "Default Web Site" -Protocol https -Port 443
    Write-Host 'Created https binding for "Default Web Site"'
}
if (@(netsh http show sslcert ipport="0.0.0.0:443" | select-string -pattern "IP:port").count -ne 0) {
    netsh http delete sslcert ipport="0.0.0.0:443" > $null
}
$cert = (Get-ChildItem cert:\LocalMachine\My | where-object { $_.FriendlyName -eq "$hostname" } | Select-Object -First 1).Thumbprint
$guid = [guid]::NewGuid().ToString("B")
netsh http add sslcert ipport="0.0.0.0:443" certhash=$cert certstorename=MY appid="$guid" > $null
Write-Host "Updated https binding to use this certificate"

# Export certificate to .pfx (Windows 2012 and higher)
$scriptPath = split-path -parent $MyInvocation.MyCommand.Definition
if ([Environment]::OSVersion.Version -ge (new-object 'Version' 6,2)) {
    $pfxname = $hostname.Split(".")[0]
    if ($pfxname -eq '*') {$pfxname = "wildcard"}
    $pfxname = $pfxname + ".pfx"
    Remove-Item $scriptPath\$pfxname -ErrorAction Ignore
    $pfxpwd = ConvertTo-SecureString -String "certificate" -Force -AsPlainText
    $cert = (Get-ChildItem cert:\LocalMachine\My | where-object { $_.FriendlyName -eq "$hostname" } | Select-Object -First 1).Thumbprint
    Get-ChildItem -Path cert:\localMachine\My\$cert | Export-PfxCertificate -FilePath $scriptPath\$pfxname -Password $pfxpwd -ChainOption EndEntityCertOnly > $null
    Write-Host "Exported certificate in PFX format with password 'certificate' to"
    Write-Host "    $scriptPath\$pfxname"
}

# Export domain CA root certificate to domainRoot.cer
Remove-Item $scriptPath\domainRoot.cer -ErrorAction Ignore
certutil -config $OnlineCA '-ca.cert' $scriptPath\domainRoot.cer > $null
Write-Host "Exported domain root certificate to"
Write-Host "    $scriptPath\domainRoot.cer"

Importowanie nowego certyfikatu do istniejącego wdrożenia

Jeśli wdrożenie oprogramowania ArcGIS Enterprise zostało już skonfigurowane, wykonaj poniższe czynności, aby zaimportować nowy certyfikat do portalu ArcGIS Enterprise i serwera hostującego, a także ustawić ten certyfikat jako domyślny certyfikat internetowy dla obu tych komponentów.

W poniższych czynnościach przedstawiono sposób importowania obu plików certyfikatów eksportowanych przez skrypt: certyfikatu głównego domeny jako pliku .cer i certyfikatu serwera jako pliku .pfx. Oba te certyfikaty powinny znajdować się w tym samym folderze, w którym zapisano skrypt. Lokalizacje tych certyfikatów są także podawane w danych wynikowych wiersza poleceń udostępnianych przy wykonywaniu skryptu.

  1. Zaloguj się do aplikacji ArcGIS Portal Administrator Directory pod adresem https://sample.domain.com:7443/arcgis/portaladmin.
  2. Wybierz opcje Bezpieczeństwo (Security) > Certyfikaty SSL (SSL Certificates) i kliknij opcję Importuj certyfikat główny lub pośredni (Import Root or Intermediate Certificate).
  3. Podaj alias certyfikatu i ścieżkę do pliku domainRoot.cer wyeksportowanego przez powyższy skrypt. Wybierz opcję Nie restartuj portalu po imporcie (Do not restart the portal after import) (portal zostanie zrestartowany w ramach operacji wykonywanej w etapie nr 7) i kliknij opcję (Importuj (Import).
  4. Przejdź z powrotem do strony Certyfikaty SSL (SSL Certificates) i kliknij opcję Importuj istniejący certyfikat serwera (Import Existing Server Certificate).
  5. Wpisz certificate jako hasło certyfikatu, wpisz alias certyfikatu inny niż alias podany dla certyfikatu głównego i przejdź do pliku .pfx na Twoim komputerze. Kliknij przycisk Import (Importuj).
  6. Wróć do strony Certyfikaty SSL (SSL Certificates) i kliknij opcję Aktualizuj (Update).
  7. Zastąp wartość opcji Certyfikat SSL serwera internetowego aliasem certyfikatu .pfx zaimportowanego w etapie nr 5. Kliknij przycisk Update (Aktualizuj).

    Portal zostanie zrestartowany, co może potrwać kilka minut.

  8. Zaloguj się do aplikacji ArcGIS Server Administrator Directory pod adresem https://sample.domain.com:6443/arcgis/admin.
  9. Przejdź do katalogu machines > <nazwa komputera> > sslcertificates i kliknij pozycję importRootOrIntermediate.
  10. Podaj alias, tak jak w etapie 3 i przejdź do lokalizacji, w której znajduje się plik domainRoot.cer. Kliknij przycisk Importuj (Import).
  11. Wróć do strony komputera i kliknij pozycję importExistingServerCertificate.
  12. Wpisz certificate jako hasło, a także lokalizację certyfikatu .pfx na komputerze. Kliknij opcję Prześlij.
  13. Wróć do strony komputera i kliknij opcję Edytuj (edit).
  14. Zastąp wartość opcji Certyfikat SSL serwera internetowego (Web server SSL certificate) aliasem nowego certyfikatu domeny. Kliknij opcję Zapisz zmiany (Save Edits).

    Komputer portalu zostanie zrestartowany, co może potrwać kilka minut.

Nowy certyfikat portalu ArcGIS Enterprise i serwera hostującego zostaną uznane jako zaufane przez wszystkie przeglądarki internetowe.