Skip To Content

Erstellen eines Domänenzertifikats

Da ArcGIS Enterprise HTTPS verwendet, muss ein Zertifikat mit Ihrem Portal konfiguriert werden. Seit 2017 werden im Internetbrowser Chrome nur solche Domänenzertifikate als vertrauenswürdig eingestuft, die den Parameter "Alternativer Name des Antragstellers" (Subject Alternative Name, SAN) enthalten. Dieser Parameter kann nicht durch die Anwendung IIS Manager allein konfiguriert werden. Das bedeutet, dass Zertifikate, die in diesem Workflow erstellt werden, durch Chrome nicht als vertrauenswürdig eingestuft werden.

In den meisten Fällen erhalten Sie das erforderliche Domänenzertifikat von Ihrem IT-Administrator. Das folgende Skript erstellt ein Zertifikat, das einen SAN enthält, und exportiert es aus IIS Manager in einem Format, in dem es in Ihr Portal importiert werden kann.

Speichern und Ausführen des Zertifikatskripts

Damit ein Domänenzertifikat erstellt werden kann, muss Ihre Domäne bereits eine Zertifizierungsstelle enthalten und auf Ihrem Computer muss IIS Manager installiert sein. Für diesen Workflow sollte vorzugsweise die Windows PowerShell ISE-Umgebung verwendet werden, da sie sowohl ein Skriptfenster als auch ein Eingabeaufforderungsfenster bereitstellt.

Wenn auf dem Computer bereits ein Zertifikat für den Hostnamen vorhanden ist, müssen Sie angeben, ob dieses überschrieben werden soll.

  1. Öffnen Sie die Anwendung Windows PowerShell ISE unter Verwendung der Option Als Administrator ausführen auf Ihrem Computer und erstellen Sie ein Skript.
  2. Kopieren Sie den folgenden Text über die Zwischenablage in das Skriptfenster der Anwendung.
  3. Speichern Sie das Skript als .ps1-Datei, zum Beispiel als certificateScript.ps1.
  4. Wechseln Sie im Eingabeaufforderungsfenster der ISE-Anwendung in das Verzeichnis, in dem Ihr Skript gespeichert wurde, und führen Sie das folgende Skript aus: .\certificateScript.ps1

Zertifikatskript, das in PowerShell ausgeführt werden muss

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"
Hinweis:

Wenn Sie bei der Ausführung des Skripts eine Fehlermeldung mit dem Hinweis auf eine Sicherheitsausnahme erhalten, muss die Ausführungsrichtlinie angepasst werden. Führen Sie den folgenden Befehl aus, um eine vorübergehende Änderung vorzunehmen und die Ausführung des Skripts zuzulassen:

Set-ExecutionPolicy RemoteSigned -scope Process

Importieren des neuen Zertifikats in eine vorhandene Bereitstellung

Wenn Ihre ArcGIS Enterprise-Bereitstellung bereits eingerichtet wurde, dann führen Sie die folgenden Schritte aus, um das neue Zertifikat in Ihr ArcGIS Enterprise-Portal und Ihren Hosting-Server zu importieren und als Standard-Webzertifikat für beide Komponenten festzulegen.

In diesen Schritten wird beschrieben, wie Sie die beiden Zertifikatsdateien, die durch das Skript exportiert wurden, importieren: das Stammzertifikat der Domäne im .cer-Format und das Serverzertifikat im .pfx-Format. Beide Dateien müssen in dem Ordner gespeichert sein, in dem Sie Ihr Skript gespeichert haben. Sie werden auch in der Ausgabe der Eingabeaufforderung angegeben, wenn das Skript ausgeführt wird.

  1. Melden Sie sich bei Ihrem ArcGIS Portal-Administratorverzeichnis unter https://sample.domain.com:7443/arcgis/portaladmin an.
  2. Navigieren Sie zu Security > SSL Certificates und klicken Sie auf Import Root or Intermediate Certificate.
  3. Geben Sie einen Alias für das Zertifikat und den Dateipfad zur Datei domainRoot.cer, die durch das obige Skript exportiert wurde, an. Wählen Sie die Option Do not restart the portal after import aus (das Portal wird mit der Operation in Schritt 7 neu gestartet) und klicken Sie auf Import.
  4. Navigieren Sie zurück zu SSL Certificates und klicken Sie auf Import Existing Server Certificate.
  5. Geben Sie das Zertifikatkennwort certificate an und einen Zertifikatsalias, der sich von dem Alias, den Sie für das Stammzertifikat angegeben haben, unterscheidet. Navigieren Sie dann zur .pfx-Datei auf Ihrem Computer. Klicken Sie auf Import.
  6. Kehren Sie zur Seite SSL Certificates zurück und klicken Sie auf Update.
  7. Ersetzen Sie den Wert für Web server SSL certificate durch den Alias des .pfx-Zertifikats, das Sie in Schritt 5 importiert haben. Klicken Sie auf Update. Das Portal wird neu gestartet. Dies kann einige Minuten dauern.
  8. Melden Sie sich bei Ihrem ArcGIS-Server-Administratorverzeichnis unter https://sample.domain.com:6443/arcgis/admin an.
  9. Navigieren Sie zu machines > <Computername> > sslcertificates und klicken Sie auf importRootOrIntermediate.
  10. Geben Sie einen Alias wie in Schritt 3 ein und navigieren Sie zur Datei domainRoot.cer. Klicken Sie auf Import.
  11. Navigieren Sie zurück zur Seite mit dem Computernamen und klicken Sie auf importExistingServerCertificate.
  12. Geben Sie auch hier das Kennwort certificate und den Speicherort des .pfx-Zertifikats auf Ihrem Computer an. Klicken Sie auf Submit.
  13. Navigieren Sie zurück zur Seite mit dem Computernamen und klicken Sie auf edit.
  14. Ersetzen Sie den Wert für Web server SSL certificate durch den Alias des neuen Domänenzertifikats. Klicken Sie auf Save Edits. Der Servercomputer wird neu gestartet. Dies kann einige Minuten dauern.

Wenn Sie diesen Workflow abgeschlossen haben, wird das neue Zertifikat für Ihr ArcGIS Enterprise-Portal und Ihren Hosting-Server durch alle Webbrowser als vertrauenswürdig eingestuft.