Skip to main content
Version: 5.1

Server Configuration

All values are set in <ICP_HOME>/conf/deployment.toml. Commented-out keys show default values.

Server settings​

KeyTypeDefaultDescription
serverPortint9446HTTPS port for the console and its APIs (GraphQL, auth, observability)
runtimeListenerPortint9445HTTPS port that runtimes send heartbeats to
authServicePortint9447Port of the built-in user store authentication service
ldapAuthServicePortint9450Port of the LDAP authentication adapter
defaultOpensearchAdaptorPortint9449Port of the OpenSearch adapter service
serverHoststring"0.0.0.0"Bind address
logLevelstring"INFO"Has no effect. To change the ICP server log level, set level under the [[ballerina.log.modules]] entry for wso2/icp_server
enableAuditLoggingbooleantrueEnable audit log for authentication and management events
enableMetricsbooleantrueHas no effect in ICP 2.1.0
schedulerIntervalSecondsint60How often ICP checks for inactive runtimes and marks them as offline
refreshTokenCleanupIntervalSecondsint86400How often expired refresh tokens are purged from the database

Backend endpoint settings​

When ICP is accessed through a different hostname or behind a reverse proxy, set publicBaseUrl. ICP derives all the console's backend URLs and the CORS allowed origins from it. The other keys override individual URLs.

KeyTypeDefaultDescription
publicBaseUrlstring"https://localhost:9446"External base URL of the ICP console (scheme, host, and port, no trailing slash)
backendGraphqlEndpointstring<publicBaseUrl>/graphqlURL of the ICP GraphQL API endpoint
backendAuthBaseUrlstring<publicBaseUrl>/authBase URL of the ICP authentication service
backendObservabilityEndpointstring<publicBaseUrl>/icp/observabilityURL of the ICP observability endpoint
backendWorkflowEndpointstring<publicBaseUrl>/icp/workflowURL of the ICP workflow management endpoint
backendTryitEndpointstring<publicBaseUrl>/icp/tryitURL of the ICP try-it proxy endpoint
backendWsUrlstring<publicBaseUrl>/runtime-status (wss://)WebSocket URL for live runtime status

Authentication settings​

KeyTypeDefaultDescription
authBackendUrlstring"https://localhost:9447"URL of the authentication backend service
frontendJwtHMACSecretstring"default-secret-key-at-least-32-characters-long-for-hs256"HMAC-SHA256 secret for signing JWT tokens. The default is public, so change it in production. Use at least 32 characters (not enforced).
defaultTokenExpiryTimeint3600JWT access token lifetime in seconds
refreshTokenExpiryTimeint86400Refresh token lifetime in seconds (default: 1 day)
enableRefreshTokenRotationbooleantrueRotate refresh token on each use
maxRefreshTokensPerUserint10Not enforced in ICP 2.1.0

MI management access settings​

KeyTypeDefaultDescription
miTunnelEnabledbooleanfalseSend management requests to MI runtimes in heartbeat responses instead of calling each runtime's management API directly. Use this when ICP cannot reach the MI management API, for example when MI runs behind a load balancer. Requires WSO2 Integrator: MI 4.7.0 or later.

Add miTunnelEnabled before the first [section] header and restart ICP. For details, see Connect MI behind a load balancer in the MI documentation.

Runtime management TLS settings​

ICP calls each runtime's management API directly, over HTTPS, to show artifact source and WSDLs, change loggers, enable or disable artifacts, and toggle tracing and statistics. These settings control how ICP verifies the certificate the runtime presents. They don't apply to MI runtimes when miTunnelEnabled is true, because ICP then doesn't call the MI management API directly.

info

artifactsApiTrustStorePath and artifactsApiTrustStorePassword are available from ICP 2.1.0. For earlier versions, see Trust an internal CA on ICP 2.0.0.

KeySectionTypeDefaultDescription
artifactsApiAllowInsecureTLStop levelbooleantrueSkip certificate validation for the console's management calls (artifact source, WSDL, loggers, MI users)
artifactsApiAllowInsecureTLS[icp_server.storage]booleantrueSkip certificate validation for artifact control commands (enable, disable, statistics) and tracing changes
artifactsApiTrustStorePath[icp_server.storage]string""JKS or PKCS12 truststore used to validate runtime certificates. Empty uses the JVM's default cacerts
artifactsApiTrustStorePassword[icp_server.storage]string""Password of the truststore. Can be encrypted with the cipher tool (see Encrypt Secrets)

artifactsApiAllowInsecureTLS appears in two places, and each controls a different set of calls. Set both to false in production.

Trust a runtime certificate issued by an internal CA​

When a runtime, or a gateway in front of it, presents a certificate issued by a private or internal CA:

  1. Create a truststore that contains the CA certificate:

    keytool -importcert -alias internal-ca -file internal-ca.crt \
    -storetype PKCS12 -keystore ../conf/security/mi-truststore.p12 \
    -storepass <truststore-password>
  2. Configure it in <ICP_HOME>/conf/deployment.toml. Add the top-level key before any [icp_server.*] table:

    artifactsApiAllowInsecureTLS = false

    [icp_server.storage]
    artifactsApiAllowInsecureTLS = false
    artifactsApiTrustStorePath = "../conf/security/mi-truststore.p12"
    artifactsApiTrustStorePassword = "<truststore-password>"

    If you use a relative path, it is resolved from <ICP_HOME>/bin, because ICP is started from the bin directory.

  3. Restart ICP.

The truststore replaces the JVM's default cacerts for these calls. If some runtimes use publicly signed certificates, import those CAs into the truststore as well. The certificate's host name must match the runtime's management hostname.

ICP fails to start if the truststore cannot be loaded, for example if the file is missing, the password is wrong, or the file is not a JKS or PKCS12 store. ICP logs a warning at startup if a truststore is set while either artifactsApiAllowInsecureTLS key is still true, because the truststore is not used while validation is off.

Trust an internal CA on ICP 2.0.0​

ICP 2.0.0 has no truststore setting for these calls. To keep validation on, import the CA into the cacerts of the JRE that runs ICP, set both artifactsApiAllowInsecureTLS keys to false, and restart ICP:

keytool -importcert -alias internal-ca -file internal-ca.crt -cacerts -storepass changeit

This change applies to the whole JVM and is lost when the JRE is upgraded.