Contents
Configuring System Security
GAX has many features that enhance your system security. This section discusses GAX security features and describes how to configure and/or use them.
Default Account Support
Genesys uses a default user account. This is a special account that always has full privileges to all objects and can perform any action. This account ensures that there is always at least one account that enables the administrator to correct permissions and access issues if other administrative accounts are deleted, disabled, or otherwise compromised.
GAX supports the default user account. The default user account always has full access to all the functions that are specified for the GAX role, even if this account does not have any role privileges or explicit permissions specified. When the default account is created during the installation of Configuration Server, it has full control over all configuration objects; however, this account might be deleted or its permissions on objects might be revoked. If this happens, GAX cannot work around the permissions. The default account must have the permissions set to write objects in the Configuration Server.
Use the default_account_dbid option to configure the actual account to be used, and that has all privileges assigned, in case the original default user account is disabled for security reasons or has been deleted.
Transport Layer Security (TLS)
GAX employs Transport Layer Security (TLS), a cryptographic protocol that provides security and data integrity for communications over networks such as the Internet. TLS encrypts the segments of network connections at the transport layer from end to end.
GAX supports TLS-enabled connections to the following Genesys servers:
- Configuration Server
- Solution Control Server
- Message Server
- Genesys Deployment Agent
GAX also supports TLS-enabled connections to the GAX database and the LRM database.
For the GAX database connection (either Oracle, Microsoft SQL Server, or PostgreSQL), the database driver and database must also support TLS. For information about configuring your GAX database, refer to the documentation that is specific to the database that you are using:
- Oracle: Oracle Database Advanced Security Administrator's Guide
- Microsoft SQL Server: Use the documentation that came with your database application.
- PostgreSQL: Use the documentation that came with your database application.
For information about TLS and detailed instructions about configuring secure connections, and creating and managing certificates, refer to the TLS section of the Genesys Security Deployment Guide.
Follow the instructions to create a certificate, assign that certificate to a Host object (which is required for Genesys Server to run in TLS mode), and configure the use of a secured port for the GAX application.
Next, import the server certificate to the trust storage for GAX to enable authentication for TLS connections.
Cipher Lists
Starting in GAX release 8.5.25x, you can customize Jetty SSL configuration to meet customer security requirements by setting supported ciphers for HTTPS. This is done by specifying either the cipher lists used or not used in the gax.properties file, adding new parameters to the file as necessary.
You must configure the parameters in the gax.properties file before startup of the GAX server. During the GAX startup, all these configurations are read from gax.properties and set in the embedded Jetty configuration. If they are not configured, default values will be passed to the Jetty server.
The new parameters are described in the following table:
Parameter | Description |
setIncludeProtocols | Specifies one or more protocols to be supported. Valid values are TLSv1, TLSv1.1, and TLSv1.2. Note that JDK1.8 supports only TLSv1.2 protocol. |
setIncludeCipherSuites | Specifies one or more cipher suites to be used for encoding data. |
setExcludeProtocols | Specifies one or more protocols that are not to be supported. Valid values are TLSv1, TLSv1.1, and TLSv1.2. Note that JDK1.8 supports only TLSv1.2 protocol. |
setExcludeCipherSuites | Specifies one or more cipher suites that are not to be used for encoding data. |
addExcludeProtocols | Specifies additional protocols that are not to be supported. |
addExcludeCipherSuites | Specifies additional cipher suites that are not to be used for encoding data. |
Each parameter is a comma-separated list of values, using the same syntax conventions as the Jetty XML descriptor.
For example, the gax.properties file might contain something like this::
port=2020
host=ca-to-dove
app=GAX_Rob
...
addExcludeCipherSuites=SSL_RSA_WITH_NULL_MD5,SSL_RSA_EXPORT_WITH_RC4_40_MD5
...
Note: Regular expressions for ciphers and protocols are not currently supported because OpenSSL accepts only an exact match.
Trust Store
By default, trust storage is in the JRE folder at the following location:
C:\Program Files\Java\jre<Java version>\lib\security\cacerts
The default password is "changeit".
Genesys recommends that you create a separate trust store for GAX.
[+] Create a trust store and import the certificates
The following options must be set to configure the trust store location for GAX. The options also enable authentication on a global level for all connections that use a secured port. On Linux or Windows, set these options by adding the following lines to the setenv.sh or setenv.bat script, respectively.
set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.trustStore="D:\certificates\trusted.keystore"
set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.ssl.trustStorePassword=changeit
If you have configured GAX to start as a service, add the following arguments in the JavaServerStarter.ini file:
-Djavax.net.ssl.trustStore="D:\certificates\trusted.keystore"
-Djavax.net.ssl.trustStorePassword=changeit
Secure Use of the Auto Detect Port
When GAX connects to the Auto Detect (Upgrade) port, the trustStore set by the setenv.sh or setenv.bat script is ignored. You must configure the trust store based on the settings of the Auto Detect port. In addition, you usually must import the GAX certificate into the trust store.
[+] Set up secure connection to Auto Detect port on Windows
Secure Socket Layer (SSL) Security
Genesys Administrator Extension supports Secure Socket Layer (SSL) communications between the GAX server and client-side connections using the web browser interface.
GAX can support connections through HTTP or HTTPS simultaneously. This is defined through configuration of the supported_protocol parameter in the gax.properties file, which can be found in the conf directory of your GAX installation.
GAX is HTTP Strict Transport Security (HSTS) compliant starting from the release 8.5.260.11. HSTS is disabled by default and you can enable it by configuring enable_hsts=true in the gax.properties file. This is a static change. Once HSTS is enabled, GAX prevents downgrading of encrypted HTTPS connection to unencrypted HTTP. It is implemented by sending a response header record from the server indicating that compliant Web browsers or other HTTP client programs must use HTTPS and they must display the appropriate confirmation message or error message in the browser console.
[+] Set up HTTPS for use with GAX
- https_port=8443
- supported_protocol=https or both.
- keystore_path=full path of the location of keystore
- For example gax.properties in conf folder contains the following:
keystore_password=***/SGo*********moXg\=\= backup port=2020 port=2020 backup host= https_port=8443 supported_protocol=https keystore_path=C:\\OpenSSL-Win32\\bin\\keystore host=xxx.xx.xxx.xx app=gax_https1
TLS: Preparing Genesys Management Framework
To enable GAX to connect securely to Genesys servers, you must configure the Genesys Framework as described in the Genesys Security Deployment Guide. Follow the instructions in this guide to create and manage certificates and make them usable within Genesys Framework.
Configuration Server
You must meet the following conditions to create a secure connection to Configuration Server:
- Create a an Auto Detect listening port for your Configuration Server with a certificate configured.
- Configure the GAX Server to connect when it starts up to the Configuration Server Auto Detect port by setting the GAX Server -port property. In the Start Info tab of the GAX_Server Properties dialog box, enter the following settings:
- Working Directory: /path/gax
- Command Line: ./startup.sh
- Command Line Arguments: -host <host name> -port <auto detect port number> -app GAX_Server
Message Server and Solution Control Server
Both Message Server and Solution Control Server are configured the same way.
- Create a Secured port for Message Server and Solution Control Server.
- Configure the GAX Server to connect to Message Server and Solution Control Server by using the specific Secured ports that you have created. In the Properties dialog box for the server and in the Connections tab of the GAX_Server dialog box, secured ports are displayed with a key symbol icon.
- Restart GAX Server to connect over an encrypted session by using the secure ports.
Genesys Deployment Agent
Configuring mutual TLS between GAX and Configuration Server
To support mutual TLS connection between GAX and Configuration Server, you must do the following:
- Download OpenSSL
- Add environmental variable
- Set path = C:\OpenSSL-0.9.8\bin\
- Set OPENSSL_CONF=C:\openssl-0.9.8\OpenSSL.cnf
- Prepare certificate
- Go to OpenSSL location.
- Run Openssl>req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 5000 -config "c:\openssl-0.9.8\openssl.cnf
- Set passphrase = changeit (password that will be used later)
- Openssl> x509 -outform der -in cert.pem -out cert.der
- Copy cert.der cert.cer in a folder, which will be used later (optional)
- Remove password:
OpenSSL rsa -in key.pem -out keynopass.pem - Combine certificate and key in 1 file:
openssl pkcs12 -inkey keynopass.pem -in cert.pem -export -out cert.pfx
- Configure certificate
- In the Configuration Server machine, configure Configuration Server certificates by using the mmc utility.
- Import your cert.pfx from CME-certs directory into Personal > Certificates.
- Import cert.der (or .cer or .pem, as per UI) into Trusted Root certification > certificates.
- In the GAX machine, create a directory c:\install\openssl\GAX-certs.
- Copy the Certificates folder from the Configuration Server machine to c:\install\openssl\GAX-certs.
- Type changeit if prompted for password.
- Repeat step 1 and 2.
- Navigate to the location c:\install\OpenSSL\GAX-certs and open OpenSSL.
- Openssl>pkcs12 -export -in cert.pem -inkey keynopass.pem -certfile cert.pem -out cert-and-key.p12.
- Open cmd and navigate to c:\install\openssl\GAX-certs in cmd.
- Run keytool -importkeystore -srckeystore cert-and-key.p12 -srcstoretype pkcs12 -destkeystore gax.jks -deststoretype JKS.
- Run keytool -list -v -keystore gax.jks.
- Run keytool -importcert -alias CMEcert -file c:\install\openssl\CME-certs\cert.der -keystore gax.jks -storepass changeit.
- Configure confserv application in Configuration Server
- Select Confserv and create port 3040 as auto detect.
- Open Port > Certificate tab and click Import Certificate and then choose self-signed certificate for Configuration Server machine (the machine that you configured and not the existing machine).
- Add thumb print copied from mmc.
- In the Advanced tab of port, add tls-mutual=1, so that the output is similar to: upgrade=1;tls-mutual=1;certificate=01 11 A2 B0 42 D6 99 C8 C7 F8 C6 21 58 DD AF E4 2D FF 51 FD.
- Configure in GAX application
- Go to GAX installed path.
- Edit gax start up file with the following options:
- Add line mf_tls_mutual=true in the gax.properties file.
- Change port from 2020 to 3040 in gax.properties file.
- Restart Configuration Server and GAX.
set JAVA_OPTS=-server -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError
set JAVA_OPTS=%JAVA_OPTS% -Dcom.genesyslab.platform.commons.log.loggerFactory=com.genesyslab.platform.commons.log.Log4JLoggerFactoryImpl
set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.debug=all
set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.debug=ssl:handshake
set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9002,server=y,suspend=n
set SECURITY_OPTS=-Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.trustStore=C:\install\openssl\GAX-certs\gax.jks
set JAVA_OPTS=%JAVA_OPTS% %SECURITY_OPTS%
java %JAVA_OPTS% %DEBUG_OPTS% -jar gax.war
Configuring mutual TLS between GAX and Solution Control Server
To support mutual TLS connection between GAX and Solution Control Server (SCS), you must do the following:
- Download OpenSSL
- Add environmental variable
- Set path = C:\OpenSSL-0.9.8\bin\
- Set OPENSSL_CONF=C:\openssl-0.9.8\OpenSSL.cnf
- Prepare certificate
- Go to OpenSSL location.
- Run Openssl>req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 5000 -config "c:\openssl-0.9.8\openssl.cnf
- Set passphrase = changeit (password that will be used later)
- Openssl> x509 -outform der -in cert.pem -out cert.der
- Copy cert.der cert.cer in a folder, which will be used later (optional)
- Remove password:
OpenSSL rsa -in key.pem -out keynopass.pem - Combine cert and key in 1 file:
openssl pkcs12 -inkey keynopass.pem -in cert.pem -export -out cert.pfx
- Configure certificate
- In SCS machine, configure certificates by using the mmc utility.
- Import your cert.pfx from CME-certs directory into Personal > Certificates.
- Import cert.der (or .cer or .pem, as per UI) into Trusted Root certification > certificates.
- In the GAX machine, create a directory c:\install\openssl\GAX-certs.
- Copy the Certificates folder from SCS machine to c:\install\openssl\GAX-certs.
- Type changeit if prompted for password.
- Repeat step 1 and 2.
- Navigate to the location c:\install\OpenSSL\GAX-certs and open OpenSSL.
- Run Openssl>pkcs12 -export -in cert.pem -inkey keynopass.pem -certfile cert.pem -out cert-and-key.p12.
- Open cmd and navigate to c:\install\openssl\GAX-certs in cmd.
- Run keytool -importkeystore -srckeystore cert-and-key.p12 -srcstoretype pkcs12 -destkeystore gax.jks -deststoretype JKS.
- Run keytool -list -v -keystore gax.jks.
- Run keytool -importcert -alias CMEcert -file c:\install\openssl\CME-certs\cert.der -keystore gax.jks -storepass changeit.
- Configure SCS application in Configuration Server
- Select Confserv and create port 3045 as auto.
- Open Port > Certificate tab and click Import Certificate and then choose self-signed certificate for SCS machine (the machine that you configured and not the existing machine).
- Add thumb print copied from mmc.
- In the Advanced tab of port, add tls-mutual=1, so that the output is similar to: upgrade=1;tls-mutual=1;certificate=01 11 A2 B0 42 D6 99 C8 C7 F8 C6 21 58 DD AF E4 2D FF 51 FD.
- Configure in GAX application
- Go to GAX installed path.
- Edit gax start up file with the following options:
- Add line mf_tls_mutual=true in the gax.properties file.
- Go to Configuration Server, select GAX, and then in the Connections tab, add SCS.
- Go to Port and change port to the secured port (auto).
- Restart SCS and GAX.
set JAVA_OPTS=-server -XX:MaxPermSize=512m -XX:+CMSClassUnloadingEnabled -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError
set JAVA_OPTS=%JAVA_OPTS% -Dcom.genesyslab.platform.commons.log.loggerFactory=com.genesyslab.platform.commons.log.Log4JLoggerFactoryImpl
set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.debug=all
set JAVA_OPTS=%JAVA_OPTS% -Djavax.net.debug=ssl:handshake
set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=9002,server=y,suspend=n
set SECURITY_OPTS=-Djavax.net.ssl.trustStorePassword=changeit -Djavax.net.ssl.trustStore=C:\install\openssl\GAX-certs\gax.jks
set JAVA_OPTS=%JAVA_OPTS% %SECURITY_OPTS%
java %JAVA_OPTS% %DEBUG_OPTS% -jar gax.war
Disabling Authentication for Certain Connections
The configuring steps outlined above engage authentication for Configuration Server, Message Server, and Solution Control Server. If GAX uses the secure ports to connect to Message Server and Solution Control Server, both server-side certificates will automatically be validated against the trust storage.
In certain rare cases, you might want to disable authentication for one of the connections. To do this, add the following line to the Advanced tab of the Properties dialog box in the Transport parameters section:
"disableAuthentication=1"
Do not use white spaces. To separate this option from other options, use a semi-colon.
To disable TLS authentication for Configuration Server, add the following line to the following files:
- (Linux) setenv.sh:
JAVA_OPTS="$JAVA_OPTS -Dgax.configserver.validate.cert=off"
- (Windows) setenv.bat:
set JAVA_OPTS=%JAVA_OPTS% -Dgax.configserver.validate.cert=off
- Connections to Message Server and Solution Control Server fail if GAX does not find the received certificate in the trust store, or if Message Server and Solution Control Server do not send a certificate.
- Connections also fail to Configuration Server and databases if they are configured for authentication and the certificate is not in the trust store.
TLS: Configuring the GAX Database
You must configure your Oracle, Microsoft SQL, or PostgreSQL server to use TLS. In addition to the appropriate procedure below, refer to the documentation that came with your database for information on how to use TLS security.
[+] Configuring the GAX Oracle Database for TLS
[+] Configuring the GAX MS SQL Database for TLS
[+] Configuring the GAX PostgreSQL Database for TLS
Cross-site Scripting and Cookies
You can configure your system to improve the protection of Genesys Administrator Extension against Cross-site Scripting (XSS) attacks by configuring the HttpOnly and Secure flags on your HTTP server to further enhance the existing GAX security. These flags tell browsers how to handle cookies.
Server-side cookies can be tagged with HttpOnly and Secure flags to tell the browser how to deal with them. To achieve a maximum level of security, administrators must make this configuration on the Application Server.
Securing Server-side Cookies
HttpOnly Flag
Setting the HttpOnly flag on cookies forces the browser to prevent (disallow) scripts from accessing the cookies. This prevents JavaScript that might be introduced through an XSS attack into a browser page to access cookie data and send it to a different person. Stolen cookie data can also be used to hijack a browser session.
When GAX is running on an embedded Jetty system, GAX automatically sets the HttpOnly flag on the JSESSIONID session cookie. You can turn off this flag by adding the following line in the gax.properties file:
session_httponly = false
If GAX is using an external Tomcat web server, open and edit the $CATALINA_HOME/conf/context.xml file.
To set the HttpOnly flag, add the following attribute:
useHttpOnly="true"
The main tag should be:
<Context useHttpOnly="true">
Secure Flag
With the Secure flag set, cookies are transmitted only from the browser to the server when the connection is secured by using the HTTPS protocol. This setting is applicable to HTTPS connections only. Therefore, you must configure GAX to use an HTTPS connector, not an HTTP connector.
When GAX is running on an embedded Jetty system and supported_protocol is set to https in gax.properties, GAX automatically sets the Secure flag on the JSESSIONID session cookie. You can turn off this flag by adding the following line to the gax.properties file:
session_securecookies = false
If GAX is using an external Tomcat web server, open and edit the $CATALINA_HOME/conf/server.xml file.
To set the Secure flag, add the following attribute to the HTTPS connector:
secure="true"
The flag must not be applied to any non-HTTPS connectors. If you apply the flag to an HTTP connection, it will become unusable for Genesys Administrator Extension.
The following is an example of a valid connector:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="/home/gcti/keystore.key" keystorePass="genesys" clientAuth="false" sslProtocol="TLS" />
Content Security Policy
GAX supports Content Security Policy (CSP) starting from the release 8.5.260.11. CSP helps users in mitigating Cross-Site Scripting, man-in-the-middle attacks, and data ex-filtration. You can limit the trusted external resources using your CSP.
You can frame your own CSP and configure the CSP headers for GAX using the content_security_policy option in the gax.properties file. This is a static change. Once CSP is configured, GAX adds the Content-Security-Policy header in the response with the configured policy.
Inactivity Timeout
For security purposes, GAX can be configured to lock the application if an administrator has not used the keyboard or mouse for a period that you specify. All user input is blocked until the administrator provides login information to unlock the application. This feature ensures that no unauthorized user can access an unattended terminal that is running GAX.
Use the inactivity_timeout option to specify the amount of time in seconds of administrator inactivity (no mouse or keyboard usage) that triggers application locking. If the administrator has been inactive longer than the number of seconds that is specified by the inactivity_timeout option, the administrator must re-authenticate to be able to use the GAX application. A negative value disables this functionality.
GAX employs a keep-alive strategy to prevent session timeout; this ensures that GAX maintains your session even if the inactivity timeout feature locks the application and requires you to log in.