Install the Universal Orchestrator on Windows

To install the Keyfactor Universal OrchestratorClosed The Keyfactor Universal Orchestrator, one of Keyfactor's suite of orchestrators, is used to interact with servers and devices for certificate management, run SSL discovery and management tasks, and manage synchronization of certificate authorities in remote forests. With the addition of custom extensions, it can provide certificate management capabilities on a variety of platforms and devices (e.g. Amazon Web Services (AWS) resources, Citrix\NetScaler devices, F5 devices, IIS stores, JKS keystores, PEM stores, and PKCS#12 stores) and execute tasks outside the standard list of certificate management functions. It runs on either Windows or Linux servers or Linux containers. on Windows, copy the zip file containing installation files to a temporary working directory on the Windows server and unzip it.

Note:  In some instances, downloading a compressed file on Windows can cause the file to be marked as blocked. If you unzip a blocked file and proceed with the installation, the installation may fail with an error about missing files or dependencies (e.g. “Could not load file or assembly [filename] or one of its dependencies...”). Before beginning the installation, check the zip file before unzipping it to confirm that it is not blocked and unblock it if it is blocked.

Figure 646: Installation Files Blocked after Download

To begin the installation:

  1. On the Windows machine on which you wish to install the orchestratorClosed Keyfactor orchestrators perform a variety of functions, including managing certificate stores and SSH key stores., open a PowerShell window using the “Run as Administrator” option and change to InstallationScripts subdirectory under the temporary directory where you placed the installation files.
  2. In the PowerShell window, populate variables as appropriate based on the identity provider you’re using for Keyfactor Command, the desired orchestrator service accounts, and the desired install experience to prepare for the install. See the installation examples, below.

    In the below examples, the following variables are shown:

    • $credKeyfactor: This is used for the Keyfactor Command connect service account when the orchestrator uses Basic authentication to connect to Keyfactor Command. This is populated either using Get-Credential or built using $keyfactorUser, $keyfactorPassword, and $secKeyfactorPassword.
    • $credService: This is used for the Universal Orchestrator service account that the service runs as. Usernames should be given in DOMAIN\username format for Active Directory domain accounts or hostnameClosed The unique identifier that serves as name of a computer. It is sometimes presented as a fully qualified domain name (e.g. servername.keyexample.com) and sometimes just as a short name (e.g. servername).\username format for local user accounts. This is populated either using Get-Credential or built using $serviceUser, $servicePassword (as appropriate), and $secServicePassword (as appropriate).
    • $secClientSecret: This is used for the Keyfactor Command connect service account when the orchestrator uses OAuth token authentication to connect to Keyfactor Command. This is populated using either a Read-Host masked input prompt or built using $clientSecret.
    • $secCertPassword: This is used for the Keyfactor Command connect service account when the orchestrator uses client certificate authentication to connect to Keyfactor Command. This is populated using either a Read-Host masked input prompt or built using $certPassword.
    Tip:  In some cases, you may be using the same service account for both the Universal Orchestrator service account role and the Keyfactor Command connect service account role. If this is the case, you may use a single variable for both passwords.
  3. In the PowerShell window, run the install.ps1 script using the following syntax to begin the installation:

    Refer to the below examples for guidance.

  4. Review the output from the installation to confirm that no errors have occurred.

The script creates a directory, C:\Program Files\Keyfactor\Keyfactor Orchestrator by default, and places the orchestrator files in this directory. Log files are found in C:\Program Files\Keyfactor\Keyfactor Orchestrator\logs by default, though this is configurable (see Configure Logging for the Universal Orchestrator).

The orchestrator service, by default given a display name of Keyfactor Orchestrator Service (Default), should be automatically started at the conclusion of the install and configured to restart on reboot unless you have selected the NoService parameter.

Tip:   Once the installation of the orchestrator is complete, you need to use the Keyfactor Command Management Portal to approve the orchestrator and configure certificate stores or SSL jobs:

If you've opted to enable remote CA management for the orchestrator, further configuration is needed (see Configure the Universal Orchestrator for Remote CA Management).

Keyfactor Connect User: Basic Authentication | Service User: Network Service

This example, with expected output, shows using Basic authentication for the Keyfactor connect user and Network Service to run the local service:

Copy
$keyfactorUser = "KEYEXAMPLE\svc_kyforch1"
$keyfactorPassword = "MySecurePassword123!"
$secKeyfactorPassword = ConvertTo-SecureString $keyfactorPassword -AsPlainText -Force
$credKeyfactor = New-Object System.Management.Automation.PSCredential ($keyfactorUser, $secKeyfactorPassword)

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
  -WebCredential $credKeyfactor `
  -OrchestratorName websrvr42.keyexample.com `
  -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to NT AUTHORITY\NETWORK SERVICE for configuration file
Starting service KeyfactorOrchestrator-Default
Tip:  If you’re using Active Directory as an identity provider and do not want to provide the username and password of the Keyfactor connect user in clear text, run the following command to populate the variable (see Create Service Accounts for the Universal Orchestrator):
Copy
$credKeyfactor = Get-Credential
Keyfactor Connect User: Basic Authentication | Service User: Active Directory Service Account

This example, with expected output, shows using Basic authentication for the Keyfactor connect user and a standard Active Directory service account to run the local service:

Copy
$serviceUser = "KEYEXAMPLE\svc_kyforch1"
$servicePassword = "MyFirstSecurePassword123!"
$secServicePassword = ConvertTo-SecureString $servicePassword -AsPlainText -Force
$credService = New-Object System.Management.Automation.PSCredential ($serviceUser, $secServicePassword)

$keyfactorUser = "KEYEXAMPLE\svc_kyforch2"
$keyfactorPassword = "MySecondSecurePassword456#"
$secKeyfactorPassword = ConvertTo-SecureString $keyfactorPassword -AsPlainText -Force
$credKeyfactor = New-Object System.Management.Automation.PSCredential ($keyfactorUser, $secKeyfactorPassword)

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
  -WebCredential $credKeyfactor `
  -ServiceCredential $credService `
  -OrchestratorName websrvr42-IIS.keyexample.com `
  -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to KEYEXAMPLE\svc_kyforch1 for configuration file
Granting Log on as a Service permission to KEYEXAMPLE\svc_kyforch1
Starting service KeyfactorOrchestrator-Default
Tip:  If you’re using Active Directory as an identity provider and do not want to provide the username and password of the Keyfactor connect user in clear text, run the following command to populate the variable (see Create Service Accounts for the Universal Orchestrator):
Copy
$credKeyfactor = Get-Credential

If you will be running the service as an Active Directory domain or local account rather than Network Service, populate a variable with the user credentials for the Universal Orchestrator service account:

Copy
$credService = Get-Credential
Keyfactor Connect User: Basic Authentication | Service User: Active Directory gMSA

This example, with expected output, shows using Basic authentication for the Keyfactor connect user and an Active Directory gMSA to run the local service:

Copy
$serviceUser = "KEYEXAMPLE\GMSA_kyforch$"
$credService = New-Object System.Management.Automation.PSCredential ($serviceUser,(New-Object System.Security.SecureString))

$keyfactorUser = "KEYEXAMPLE\svc_kyforch"
$keyfactorPassword = "MySecurePassword123!"
$secKeyfactorPassword = ConvertTo-SecureString $keyfactorPassword -AsPlainText -Force
$credKeyfactor = New-Object System.Management.Automation.PSCredential ($keyfactorUser, $secKeyfactorPassword)

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
  -WebCredential $credKeyfactor `
  -ServiceCredential $credService `
  -OrchestratorName websrvr42-IIS.keyexample.com `
  -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to KEYEXAMPLE\GMSA_kyforch$ for configuration file
Granting Log on as a Service permission to KEYEXAMPLE\GMSA_kyforch$
Starting service KeyfactorOrchestrator-Default
Note:  Group managed service accounts are not supported for use in making the connection to Keyfactor Command.
Important:  Prior to using a gMSA in the installation, you need to have installed the account on the Universal Orchestrator server using the Install-ADServiceAccount PowerShell command. For example:

Install-ADServiceAccount -Identity GMSA_kyforch$

This requires the Active Directory module for Windows PowerShell, which is installed as a feature as part of the Remote Server Administrator Tools.

Tip:  If you’re using Active Directory as an identity provider and do not want to provide the username and password of the Keyfactor connect user in clear text, run the following command to populate the variable (see Create Service Accounts for the Universal Orchestrator):
Copy
$credKeyfactor = Get-Credential
Keyfactor Connect User: Token Authentication | Service User: Network Service

This example, with expected output, shows using OAuth token authentication for the Keyfactor connect user and Network Service to run the local service:

Copy
$clientSecret = "MySecureClientSecret123!"
$secClientSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
   -BearerTokenUrl https://appsrvr18.keyexample.com:1443/realms/Keyfactor/protocol/openid-connect/token `
   -ClientId Universal-Orchestrator `
   -ClientSecret $secClientSecret `
   -OrchestratorName websrvr42-UO.keyexample.com `
   -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to NT AUTHORITY\NETWORK SERVICE for configuration file
Starting service KeyfactorOrchestrator-Default
Tip:  If you’re using OAuth as an identity provider and do not want to provide the client secret in clear text, run the following command to initiate a masked input prompt to populate the variable with the secret:
$secClientSecret = Read-Host "Enter client secret:" -AsSecureString
Keyfactor Connect User: Token Authentication | Service User: Local Account

This example, with expected output, shows using OAuth token authentication for the Keyfactor connect user and a local account on the machine to run the local service:

Copy
$serviceUser = "websrvr42\kyforch"
$servicePassword = "MySecurePassword123!"
$secServicePassword = ConvertTo-SecureString $servicePassword -AsPlainText -Force
$credService = New-Object System.Management.Automation.PSCredential ($serviceUser, $secServicePassword)

$clientSecret = "MySecureClientSecret123!"
$secClientSecret = ConvertTo-SecureString $clientSecret -AsPlainText -Force

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
   -BearerTokenUrl https://appsrvr18.keyexample.com:1443/realms/Keyfactor/protocol/openid-connect/token `
   -TokenLifetime 150 `
   -ClientId Universal-Orchestrator `
   -ClientSecret $secClientSecret `
   -ServiceCredential $credService `
   -OrchestratorName websrvr42-UO.keyexample.com `
   -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to websrvr42\kyforch for configuration file
Granting Log on as a Service permission to websrvr42\kyforch
Starting service KeyfactorOrchestrator-Default
Tip:  If you’re using OAuth as an identity provider and do not want to provide the client secret in clear text, run the following command to initiate a masked input prompt to populate the variable with the secret:
$secClientSecret = Read-Host "Enter client secret:" -AsSecureString
Keyfactor Connect User: Client Certificate Authentication | Service User: Active Directory Service Account

This example, with expected output, shows using client certificate authentication with the certificate stored in the local machine store for the Keyfactor connect user and a standard Active Directory service account to run the local service:

Copy
$serviceUser = "KEYEXAMPLE\svc_kyforch"
$servicePassword = "MySecurePassword123!"
$secServicePassword = ConvertTo-SecureString $servicePassword -AsPlainText -Force
$credService = New-Object System.Management.Automation.PSCredential ($serviceUser, $secServicePassword)

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
  -ClientCertificateThumbprint 29b21df7403b4afe6daf44762e5c47fb73c07ce7 `
  -ServiceCredential $credService `
  -OrchestratorName websrvr42-IIS.keyexample.com `
  -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to KEYEXAMPLE\svc_kyforch for configuration file
Granting Log on as a Service permission to KEYEXAMPLE\svc_kyforch
Starting service KeyfactorOrchestrator-Default
Tip:  The client certificate authentication example shown here references a certificate stored in the local machine store. Because of this, the service account that will run the Universal Orchestrator service needs to be granted permissions to read the private key of the certificate before the installation is run. If the certificate had been acquired into the Universal Orchestrator service account user's personal store rather than the local machine store, the step of granting private key read permissions would not have been necessary.
Tip:  If you will be running the service as an Active Directory domain or local account rather than Network Service and do not want to provide the password in clear text, populate a variable with the user credentials for the Universal Orchestrator service account:
Copy
$credService = Get-Credential
Keyfactor Connect User: Client Certificate Authentication | Service User: Network Service

This example, with expected output, shows using client certificate authentication with the certificate stored as a file and Network Service to run the local service:

Copy
$certPassword = "MySecureCertPassword123!"
$secCertPassword = ConvertTo-SecureString $clientSecret -AsPlainText -Force

.\install.ps1 -URL https://keyfactor.keyexample.com/KeyfactorAgents `
  -ClientCertificate C:\Certs\kyforch.pfx `
  -ClientCertificatePassword $secCertPassword `
  -OrchestratorName websrvr42-IIS.keyexample.com `
  -Capabilities all

Copying files
Setting configuration data
Installing Windows Service
Granting necessary file permissions to KEYEXAMPLE\svc_kyforch for configuration file
Granting Log on as a Service permission to KEYEXAMPLE\svc_kyforch
Starting service KeyfactorOrchestrator-Default
Tip:  The client certificate authentication example shown here does not use the -ServiceCredential parameter. This will cause the Universal Orchestrator service to run as Network Service. If you prefer to run the service as a domain service account, you will need to include the -ServiceCredential parameter and specify the PSCredential value for the service credentials appropriately, as shown in the previous examples.

Network Service will need to be granted read and write permissions on the PFXClosed A PFX file (personal information exchange format), also known as a PKCS#12 archive, is a single, password-protected certificate archive that contains both the public and matching private key and, optionally, the certificate chain. It is a common format for Windows servers. file before the script is executed.

Tip:  If you’re using client certificate authentication and do not want to provide the certificate password in clear text, run the following command to initiate a masked input prompt to populate the variable with the password:
$secCertPassword = Read-Host "Enter certificate password:" -AsSecureString