Omnissa Horizon locked.properties Settings

Omnissa Horizon locked.properties Settings

The Omnissa Horizon locked.properties file feels like the best worst-kept secret.

The Horizon locked.properties file allows you to change many settings that aren’t accessible from the main Horizon admin interface.

In this post, I will show you step-by-step how to create and configure the locked.properties file, along with all the settings I’ve found that can be configured.

Create locked.properties

By default, the locked.properties file does not exist.

If you are still using a VMware branded version of Horizon, the path will be C:\Program Files\VMware\VMware View\Server\sslgateway\conf.

This is done to make sure the file is ASCII, as the part of Horizon that reads the locked.properties file requires it to be in ASCII.

Once completed, go to the section Apply locked.properties Changes.

locked.properties Settings

The locked.properties file works by having one line per setting. On each line, the first item is the setting you want to change, followed by the = symbol (you can add spaces around the = symbol if you want). After the = symbol, you enter what you want the setting changed to.

An example would be if I wanted to change a setting named superFun and I wanted it to be set to Always. I would enter that as superFun=Always or superFun = Always.

Many of the settings that can be changed support multiple values. When the setting supports various values, it is represented as a numbered list starting at 1.

An example would be if the setting superFun supported a list, and I wanted to define multiple values, it would be entered as follows.

superFun.1=Friday
superFun.2=Saturday

There is no single source for all the settings in the locked.properties file. Each of the settings are scattered throughout Omnissa’s documentation.

Please use caution when changing the locked.properties settings, as some changes can make your Horizon setup less secure.

Below are all the locked.properties settings I’ve found.

Gateway

The default is undefined.

Example

portalHost.1=horizon.thedxt.ca
portalHost.2=uag1.thedxt.ca
portalHost.3=dxt-ho-uag01

For more information about portal hosts, here is the Omnissa documentation.

Load Balance

The default is undefined.

Example

balancedHost.1=horizon.thedxt.ca
balancedHost.2=load1.thedxt.ca
balancedHost.3=load2.thedxt.ca

Support for balanceHost.Number was added in 2306.

For more information about balanced hosts, here is the Omnissa documentation.

Host Checking

The default is false.

Example

allowUnexpectedHost=true

Before version 2306, the default value was true.

For more information about allowing unexpected hosts, here is the Omnissa documentation.

Gateway Location

The default is Internal.

For more information about the gateway location setting, here is the Omnissa documentation.

Client Denylisting

The default is disabled.

Example

secureHandshakeDelay=2000
insecureHandshakeDelay=1000

For more information about secure and insecure handshake delays, here is the Omnissa documentation.

Request Counting

The default is disabled.

Example

requestTallyThreshold=100
tarPitGraceThreshold=5

For more information about the tar pit grace threshold and the request tally threshold, here is the Omnissa documentation.

Disable HTTP Redirection

The default is false.

Example

disableRedirection=true

disableRedirection is only for Horizon version 2412 and later.

For Horizon version 2406 and earlier the following can be used.

The value must be

frontMappingHttpDisabled.1=5:*:missing
frontMappingHttpDisabled.2=3:/error/*:file:docroot

For more information about disabling HTTP redirection, here is the Omnissa documentation.

Smart Card Authentication

The default is undefined.

The default is undefined.

The default is false.

Example

trustKeyfile=lonqa.key
trustStoretype=jks
useCertAuth=true

For more information about smart card authentication, here is the Omnissa documentation.

CRL Checking

The default is false.

The default is undefined.

Example

enableRevocationChecking=true
crlLocation.1=http://root.ocsp.net/certEnroll/ocsp-ROOT_CA.crl
crlLocation.2=http://root2.ocsp.net/certEnroll/ocsp-ROOT2_CA.crl

For more information about CRL checking, here is the Omnissa documentation.

OCSP Certificate Revocation Checking

The default is false.

The default is false.

The default is undefined.

The default is undefined.

Example

enableRevocationChecking=true
enableOCSP=true
ocspURL=http://te-ca.lonqa.int/ocsp
ocspSigningCert=te-ca.signing.cer

For more information about OCSP certificate revocation checking, here is the Omnissa documentation.

Smart Card Certificate Revocation Checking

The default is true.

The default is undefined.

The default is false.

The default is true.

Example

allowCertCRLs=true
ocspResponderCert=ocsp.cer
ocspSendNonce=true
ocspCRLFailover=true

For more information about smart card certificate revocation checking, here is the Omnissa documentation.

Handshake Monitoring

The default is 10 seconds.

Example

handshakeLifetime=20

For more information about the handshake lifetime setting, here is the Omnissa documentation.

IETF (Internet Engineering Task Force) Standards

The default is 1 year, defined as 31536000 seconds.

The default is ON.

The default is true.

Example

hstsMaxAge=31556926
x-frame-options=OFF
checkOrigin=false

For more information about IETF (Internet Engineering Task Force) standards, here is the Omnissa documentation.

HSTS (HTTP Strict Transport Security)

The default is undefined.

Example

hstsFlags.1=includeSubDomains
hstsFlags.2=preload

For more about HSTS (HTTP Strict Transport Security), here is the Omnissa documentation.

W3C (World Wide Web Consortium) Standards

The default is disabled.

The default is activated and set to strict-origin-when-cross-origin.

Example

permsPolicy=camera=(), microphone=(self https://example.com), screen-wake-lock=*
referrerPolicy=OFF

For more information about W3C (World Wide Web Consortium) standards, here is the Omnissa documentation.

CORS (Cross-Origin Resource Sharing)

The default is true.

The default allows application/x-www-form-urlencoded, application/xml, and text/xml.

If you want to get more granular, you can also set the following.

The default allows application/json, application/text, and application/x-www-form-urlencoded.

The default is to allow application/json.

The default is to allow application/json.

The default is to allow application/json.

The default is to allow all.

If you want to get more granular, you can also set the following.

The default is to expose all.

The default is true.

The default is true.

The default is false.

The default is false.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is true.

The default is GET, HEAD, and POST.

If you want to get more granular, you can also set the following.

The default is GET.

The default is GET.

The default is GET and HEAD.

The default is GET, POST, PUT, PATCH, and DELETE.

The default is GET.

The default is GET and HEAD.

The default is GET and POST.

The default is true.

The default is 0.

The default is ppkfnjlimknmjoaemnpidmdlfchhehel.

The default is ckg65ilaae42o6wd3uj4xfwznhba7pz2p6kojga5c27hkwq5f66qaaic.

The default is false.

The default is false.

Example

enableCORS = true
acceptContentType.1 = application/x-www-form-urlencoded
acceptContentType.2 = application/xml
acceptContentType.3 = text/xml
filterHeaders=false
checkOrigin=false
checkReferer=true
allowCredentials=true
allowMethod.1=GET
allowMethod.2=HEAD
allowMethod.3=POST
allowMethod-saml.1=GET
allowMethod-saml.2=HEAD
allowPreflight=false
maxAge=10
chromeExtension=bpifadopbphhpkkcfohecfadckmpjmjd
iwaBundleId=ckg65ilaae42o6wd3uj4xfwznhba7pz2p6kojga5c27hkwq5f66qaaic
blockHtmlAccess=true
blockSwaggerDocs=true

For more information about CORS (Cross-Origin Resource Sharing) options, here is the Omnissa documentation.

CSP (Content Security Policy)

The default is true.

The default is default-src 'none';base-uri 'self';child-src 'self' blob:;connect-src 'self' wss:;font-src 'self';form-action 'none';frame-ancestors 'self';frame-src 'self' blob:;img-src 'self' data: blob:;manifest-src 'none';media-src 'self' blob:;object-src 'self' blob:;script-src 'self' 'wasm-unsafe-eval';style-src 'self' 'unsafe-inline';worker-src 'self'

If you want to get more granular, you can also set the following.

The default is base-uri 'none';connect-src 'self' https:;default-src 'none';font-src 'self' data:;form-action 'none';frame-ancestors 'none';img-src 'self' data:;script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline'

The default is base-uri 'self';child-src 'self' blob:;connect-src 'self' wss:;default-src 'none';font-src 'self';form-action 'none';frame-ancestors 'self';img-src 'self' data: blob:;media-src 'self' blob:;script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline'

The default is base-uri 'self';child-src 'self' blob:;connect-src 'self' wss:;default-src 'none';font-src 'self';form-action 'none';frame-ancestors 'self';img-src 'self' data: blob:;media-src 'self' blob:;script-src 'self' 'unsafe-eval';style-src 'self' 'unsafe-inline'

The default is base-uri 'none';connect-src 'self' https:;default-src 'none';font-src 'self' data:;form-action 'none';frame-ancestors 'none';img-src 'self' data:;script-src 'self';style-src 'self' 'unsafe-inline'

The default is base-uri 'none';connect-src 'self' https:;default-src 'none';font-src 'self' data:;form-action 'none';frame-ancestors 'none';img-src 'self' data:;script-src 'self';style-src 'self' 'unsafe-inline'

The default is nosniff.

The default is deny.

Example

enableCSP=true
content-security-policy=default-src 'none';base-uri 'self';child-src 'self' blob:;connect-src 'self' wss:;font-src 'self';form-action 'none';frame-ancestors 'self';frame-src 'self' blob:;img-src 'self' data: blob:;manifest-src 'none';media-src 'self' blob:;object-src 'self' blob:;script-src 'self' 'wasm-unsafe-eval';style-src 'self' 'unsafe-inline';worker-src 'self'
content-security-policy-admin=base-uri 'none';connect-src 'self' https:;default-src 'none';font-src 'self' data:;form-action 'none';frame-ancestors 'none';img-src 'self' data:;script-src 'self' 'unsafe-inline' 'unsafe-eval';style-src 'self' 'unsafe-inline'
content-security-policy-rest=base-uri 'none';connect-src 'self' https:;default-src 'none';font-src 'self' data:;form-action 'none';frame-ancestors 'none';img-src 'self' data:;script-src 'self';style-src 'self' 'unsafe-inline'
x-content-type-options=nosniff
x-frame-options=deny

For more information about CSP (Content Security Policy), here is the Omnissa documentation.

XSS (Cross-Site Scripting)

The default is ON.

Example

x-permitted-cross-domain-policies=OFF

For more information about XSS (cross-site scripting), here is the Omnissa documentation.

Disable Web Indexing

The default is ON.

Example

x-robots-tag=OFF

For more information about disabling web indexing, here is the Omnissa documentation.

User Agent Allowlisting

The default is that all user agents are allowed.

Example

clientWhitelist-portal.1=Chrome-14
clientWhitelist-portal.2=Safari-5.1

For more information about user agent allowlisting, here is the Omnissa documentation.

Acceptance Policies

Example

secureProtocols.1=TLSv1.3
preferredSecureProtocol=TLSv1.3
enabledCipherSuite.1=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
enabledCipherSuite.2=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
enabledCipherSuite.3=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
enabledCipherSuite.4=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
honorClientOrder=false

For more information on the acceptance policies you can configure, here is the Omnissa documentation.

Allow HTTP Connections

The default is https.

The default is port 80.

The default is to listen on all network interfaces.

Example

serverProtocol=http
serverPortNonTLS=1337
serverHostNonTLS=10.20.30.40

For more information about allowing HTTP connections, here is the Omnissa documentation.

Change Default Ports

The default is https.

The default is port 443.

The default is to listen on all network interfaces.

The default is to use the same port as serverPort.

The default is to use the same IP as serverHost.

The default is false. If serverPort or serverPortAdmin are on port 80, it will always be true.

The default is port 80. If disableRedirection is set to true, it will be ignored.

The default is to listen on all interfaces. If disableRedirection is set to true, it will be ignored.

Example

serverProtocol=https
serverPort=7443
serverHost=10.20.30.40
serverPortAdmin=9443
serverHostAdmin=10.21.31.41
disableRedirection=false
serverPortNonSsl=8080
serverHostNonSsl=10.22.32.42

For more information about changing the default HTTP ports, here is the Omnissa documentation.

HTTP Port Redirection

frontMappingHttpDisabled.1=1:/admin*:missing
frontMappingHttpDisabled.2=1:/dct*:missing
frontMappingHttpDisabled.3=1:/rest*:missing
frontMappingHttpDisabled.4=1:/view-vlsi*:missing
frontMappingHttpDisabled.5=3:/error/*:file:docroot
frontMappingHttpDisabled.6=5:*:moved:https::443

You are allowed to change the last line frontMappingHttpDisabled.6=5:*:moved:https:: to the port number you want HTTP traffic to be redirected to.

Example

frontMappingHttpDisabled.1=1:/admin*:missing
frontMappingHttpDisabled.2=1:/dct*:missing
frontMappingHttpDisabled.3=1:/rest*:missing
frontMappingHttpDisabled.4=1:/view-vlsi*:missing
frontMappingHttpDisabled.5=3:/error/*:file:docroot
frontMappingHttpDisabled.6=5:*:moved:https::7443

For more information about HTTP port redirection, here is the Omnissa documentation.

Change PSG (PCoIP Secure Gateway) Port

The default is port 50060.

Example

psgControlPort=52060

For this change to work, you also need to edit the registry. In the registry path HKLM:\SOFTWARE\Teradici\SecurityGateway, add TCPControlPort as REG_SZ, with the value set to your port number.

An easy way to do this is to use my script Registry Check Setter.

Example

reg-check-set -reg_path "HKLM:\SOFTWARE\Teradici\SecurityGateway" -reg_name "TCPControlPort" -reg_type string -reg_value "52060"Code language: PowerShell (powershell)

For more information about changing the PSG (PCoIP Secure Gateway) port, here is the Omnissa documentation.

Apply locked.properties Changes

Once you have completed editing and saving the locked.properties file, you need to apply the changes.

In VMware branded versions of Horizon, the service will be named VMware Horizon View Connection Server.

If you run into an issue, check the debug log files located in C:\ProgramData\Omnissa\Horizon\logs.

For VMware branded versions of Horizon, the debug log files will be located in C:\ProgramData\VMware\VDM\logs.

If you want to read more about the locked.properties file, here is the best Omnissa documentation I found.

Exit mobile version