ArcGIS Enterprise utilise HTTPS, qui nécessite la configuration d’un certificat avec votre portail. Depuis le début de l’année 2017, le navigateur Internet Chrome fait uniquement confiance aux certificats de domaine contenant un paramètre SAN (Subject Alternative Name). Ce paramètre ne peut pas être configuré seulement par l’application IIS Manager, 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 d’IIS Manager dans un format pouvant être importé sur votre portail.
Enregistrer et exécuter le script de certificat
Pour 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 recommandé 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 sur votre machine, le script vous demande si vous souhaitez remplacer le certificat existant.
- 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.
- Copiez le texte ci-dessous dans la fenêtre de script de l’application.
- Enregistrez le script en tant que fichier .ps1 (par exemple, certificateScript.ps1).
- Dans le volet d’invite de commande de l’application ISE, spécifiez les répertoires dans lesquels le script a été enregistré, puis exécutez le script .\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 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"
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 au format .cer et le certificat de serveur au 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é.
- Connectez-vous à votre répertoire administrateur d’ArcGIS Portal à l’adresse suivante : https://sample.domain.com:7443/arcgis/portaladmin.
- Accédez à Security (Sécurité) > SSL Certificates (Certificats SSL) et cliquez sur Import Root or Intermediate Certificate (Importer le certificat racine ou intermédiaire).
- 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).
- Revenez à SSL Certificates (Certificats SSL) et cliquez sur Import Existing Server Certificate (Importer le certificat de serveur existant).
- Saisissez certificate (certificat) comme mot de passe du certificat et un alias de certificat différent de celui fourni pour le certificat racine, puis accédez au fichier .pfx sur votre machine. Cliquez sur Importer.
- Retournez à la page SSL Certificates (Certificats SSL) et cliquez sur Update (Mettre à jour).
- 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 prendre quelques minutes.
- Connectez-vous à votre répertoire administrateur d’ArcGIS Server à l’adresse suivante : https://sample.domain.com:6443/arcgis/admin.
- Accédez à machines > <nom de machine> > sslcertificates et cliquez sur importRootOrIntermediate.
- Fournissez un alias comme à l’étape 3 et accédez à l’emplacement du fichier domainRoot.cer. Cliquez sur import (importer).
- Retournez à la page de la machine et cliquez sur importExistingServerCertificate.
- Saisissez certificate (certificat) comme mot de passe et l’emplacement du certificat .pfx sur votre machine. Cliquez sur Submit (Envoyer).
- Retournez à la page de la machine et cliquez sur edit (mettre à jour).
- 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 serveur redémarre, ce qui peut prendre quelques minutes.
Tous les navigateurs Web se fient au nouveau certificat de votre portail ArcGIS Enterprise et de votre serveur d’hébergement.
Vous avez un commentaire à formuler concernant cette rubrique ?