Skip To Content

Créer un certificat de domaine

ArcGIS Enterprise utilise HTTPS, qui nécessite la configuration d’un certificat avec votre portail. Le navigateur Internet Chrome ne fait confiance qu’aux certificats de domaine contenant un paramètre SAN (Subject Alternative Name). Ce paramètre ne peut pas être configuré par l’application IIS Manager seule, ce qui signifie que Chrome ne se fie pas aux certificats produits via ce processus.

Le plus souvent, votre administrateur informatique vous fournira le certificat de domaine nécessaire. Le script ci-dessous crée un certificat contenant un paramètre SAN et l’exporte à partir de IIS Manager dans un format pouvant ensuite être importé sur votre portail.

Enregistrer et exécuter le script de certificat

Pour que vous puissiez créer un certificat de domaine, votre domaine doit déjà posséder une autorité de certificat et IIS Manager doit être installé sur votre machine. L’environnement Windows PowerShell ISE est préférable pour ce processus, car il fournit à la fois une fenêtre de script et une fenêtre d’invite de commande.

Si un certificat de nom d’hôte existe déjà sur votre ordinateur, le script vous demandera si vous souhaitez remplacer le certificat existant.

  1. Ouvrez l’application Windows PowerShell ISE sur votre ordinateur à l’aide de l’option Run as administrator (Exécuter en tant qu’administrateur), et créez un script.
  2. Copiez le texte ci-dessous et collez-le dans la fenêtre de script de l’application.
  3. Enregistrez le script en tant que fichier .ps1 (par exemple, certificateScript.ps1).
  4. Dans le panneau d’invite de commande de l’application ISE, spécifiez les répertoires dans lesquels votre script a été enregistré, puis exécutez le script suivant : .\certificateScript.ps1

Script de certificat à exécuter dans 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 2016 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"
Remarque :

Si vous recevez un message d’erreur d’exception de sécurité lorsque vous tentez d’exécuter le script, la stratégie d’exécution doit être ajustée. Pour effectuer une modification temporaire et permettre au script de s’exécuter, utilisez la commande suivante :

Set-ExecutionPolicy RemoteSigned -scope Process

Importer le nouveau certificat dans un déploiement existant

Si votre déploiement ArcGIS Enterprise a déjà été configuré, suivez les étapes ci-après pour importer le nouveau certificat sur votre portail ArcGIS Enterprise et votre serveur d’hébergement et pour en faire le certificat Web par défaut des deux composants.

Ces étapes indiquent comment importer les deux fichiers de certificat exportés par le script : le certificat racine de domaine dans le format .cer et le certificat de serveur dans le format .pfx. L’emplacement des deux doit se trouver dans le dossier où vous avez enregistré le script ; il est également spécifié dans la sortie de l’invite de commande lorsque le script est exécuté.

Remarque :

Pour n’importer le nouveau certificat que vers votre serveur d’hébergement, suivez les étapes 8 à 14.

  1. Connectez-vous à votre répertoire administrateur d’ArcGIS Portal à l’adresse suivante : https://sample.domain.com:7443/arcgis/portaladmin.
  2. Accédez à Security (Sécurité) > SSL Certificates (Certificats SSL) et cliquez sur Import Root or Intermediate Certificate (Importer le certificat racine ou intermédiaire).
  3. Spécifiez un alias pour le certificat et le chemin d’accès au fichier domainRoot.cer exporté par le script ci-dessus. Sélectionnez l’option Do not restart the portal after import (Ne pas redémarrer le portail après l’importation) (l’opération effectuée à l’étape 7 redémarre le portail), puis cliquez sur Import (Importer).
  4. Revenez à SSL Certificates (Certificats SSL) et cliquez sur Import Existing Server Certificate (Importer le certificat de serveur existant).
  5. Saisissez le mot de passe du certificat certificate (certificat) et un alias de certificat différent de celui fourni pour le certificat racine, puis accédez au fichier .pfx sur votre ordinateur. Cliquez sur Importer.
  6. Retournez à la page SSL Certificates (Certificats SSL) et cliquez sur Update (Mettre à jour).
  7. Remplacez la valeur de Web server SSL certificate (Certificat SSL du serveur Web) par l’alias du certificat .pfx que vous avez importé à l’étape 5. Cliquez sur Mettre à jour. Le portail redémarre, ce qui peut nécessiter jusqu’à quelques minutes.
  8. Connectez-vous au répertoire administrateur ArcGIS Server à l’adresse https://sample.domain.com:6443/arcgis/admin.
  9. Accédez à machines > <nom de machine> > sslcertificates et cliquez sur importRootOrIntermediate.
  10. Fournissez un alias comme à l’étape 3 et accédez à l’emplacement du fichier domainRoot.cer. Cliquez sur import (importer).
  11. Retournez à la page de la machine et cliquez sur importExistingServerCertificate.
  12. À nouveau, saisissez le mot de passe certificate et l’emplacement du certificat .pfx sur votre ordinateur. Cliquez sur Submit (Envoyer).
  13. Retournez à la page de la machine et cliquez sur edit (mettre à jour).
  14. Remplacez la valeur de Web server SSL certificate (Certificat SSL du serveur web) par l’alias du nouveau certificat de domaine. Cliquez sur Enregistrer les mises à jour. La machine de serveur redémarre, ce qui peut nécessiter jusqu’à quelques minutes.

Une fois le processus terminé, tous les navigateurs web se fient au nouveau certificat de votre portail ArcGIS Enterprise et de votre serveur d’hébergement.