IceSSL.*
IceSSL Property Overview
The IceSSL implementations for our supported platforms use many of the same configuration properties. However, there are some properties that are specific to certain platforms or languages. For properties with such limitations, we list the supported platforms or underlying SSL libraries in the synopsis and provide additional platform-specific notes if necessary. You'll see the following platforms, languages and SSL libraries listed in the property reference:
SChannel (C++ on Windows)
SecureTransport (C++ on macOS and iOS)
OpenSSL (C++ on Linux or Windows)
Java
.NET
A property is supported by all platforms if no limitations are mentioned.
Finally, note that Ice for Swift and the Ice extensions for Python, Ruby and PHP use IceSSL for C++, therefore they use the IceSSL properties for SChannel, SecureTransport or OpenSSL as appropriate for the target platform.
JavaScript
These IceSSL properties have no effect on JavaScript.
IceSSL.CAs
Synopsis
IceSSL.CAs=path
(SChannel, SecureTransport, OpenSSL, .NET)
Description
Specifies the path name of a file containing the certificates of trusted certificate authorities (CAs).
If you wish to use the CA certificates bundled with your platform, leave this property unset and enable IceSSL.UsePlatformCAs
.
Platform Notes
SChannel, SecureTransport, .NET
The file can be encoded using the DER or PEM formats. When using PEM, the file can contain multiple certificates.
IceSSL attempts to locate path
as specified; if the given path is relative but does not exist, IceSSL also attempts to locate path
relative to the default directory defined by IceSSL.DefaultDir
.
On iOS, IceSSL also attempts to open the specified CA certificate file as Resources/DefaultDir/path
in the application's resource bundle if IceSSL.DefaultDir
is defined or as Resources/path
if not defined.
OpenSSL
The file must be encoded using the PEM format and can contain multiple certificates. The path
can also refer to a directory prepared in advance using the OpenSSL utility c_rehash
.
IceSSL attempts to locate path
as specified; if the given path is relative but does not exist, IceSSL also attempts to locate path
relative to the default directory defined by IceSSL.DefaultDir
.
IceSSL.CertificateRevocationListFiles
Synopsis
IceSSL.CertificateRevocationListFiles=file[:file]
(OpenSSL)
Description
Specifies the path of a file containing the CRL info used for certificate revocation checks, the path is relative to IceSSL.DefaultDir
. Multiple files can be specified in which case they must be separated using the platforms path separator.
IceSSL.CertFile
Synopsis
IceSSL.CertFile=file
(SecureTransport, SChannel, OpenSSL, .NET)
Description
Specifies a file that contains the program's certificate and the corresponding private key, the private key can be specified separately using IceSSL.Keyfile
. The file name may be specified relative to the default directory defined by IceSSL.DefaultDir
.
Platform Notes
SChannel
The file must use the PFX (PKCS#12) format and contain the certificate and its private key or a PEM file containing the certificate in which case the private key must be specify using IceSSL.Keyfile
. If a password is required to load the file, the application must supply the password using IceSSL.Password
, otherwise IceSSL will reject the certificate.
IceSSL attempts to locate file
as specified; if the given path is relative but does not exist, IceSSL also attempts to locate file
relative to the default directory defined by IceSSL.DefaultDir
.
SecureTransport
The file must use the PFX (PKCS#12) format and contain the certificate and its private key or a PEM file containing the certificate in which case the private key must be specify using IceSSL.Keyfile
. If a password is required to load the file, macOS will use its default graphical password prompt unless the application has supplied the password using IceSSL.Password
. Define IceSSL.Keychain
to import this certificate into the specified keychain.
IceSSL attempts to locate file
as specified; if the given path is relative but does not exist, IceSSL also attempts to locate file
relative to the default directory defined by IceSSL.DefaultDir
.
On iOS, IceSSL also attempts to open the specified certificate file as Resources/DefaultDir/file
in the application's resource bundle if IceSSL.DefaultDir
is defined or as Resources/file
if not defined.
OpenSSL
The file must use the PFX (PKCS#12) format and contain the certificate and its private key or a PEM file containing the certificate in which case the private key must be specify using IceSSL.Keyfile
. If a password is required to load the file, the application must supply the password using IceSSL.Password
.
IceSSL attempts to locate file
as specified; if the given path is relative but does not exist, IceSSL also attempts to locate file
relative to the default directory defined by IceSSL.DefaultDir
.
.NET
The file must use the PFX (PKCS#12) format and contain the certificate and its private key. The password for the file must be supplied using IceSSL.Password
.
IceSSL attempts to locate file
as specified; if the given path is relative but does not exist, IceSSL also attempts to locate file
relative to the default directory defined by IceSSL.DefaultDir
.
IceSSL.CertStore
Synopsis
IceSSL.CertStore=name
(SChannel, .NET)
Description
Specifies the name of a certificate store to use when locating certificates via IceSSL.FindCert
. Legal values for name
include AddressBook
, AuthRoot
, CertificateAuthority
, Disallowed
, My
, Root
, TrustedPeople
, and TrustedPublisher
. You can also use an arbitrary value for name
.
If not specified, the default value is My
.
IceSSL.CertStoreLocation
Synopsis
IceSSL.CertStoreLocation=CurrentUser|LocalMachine
(SChannel, .NET)
Description
This property is used for two different purposes:
to specify the location of a certificate store to use when locating certificates via
IceSSL.FindCert
.to specify if certificate chain validation will use the machine context (HCCE_LOCAL_MACHINE) or the current user context (HCCE_CURRENT_USER).
If not specified, the default value is CurrentUser.
An Ice program running as a Windows service will typically need to set this property to LocalMachine
.
IceSSL.CheckCertName
Synopsis
IceSSL.CheckCertName=num
Description
Specifies if certificate host name verification is enabled. The legal values are shown in the table below. If this property is not defined, the default value is 0.
0 | Host name verification is disabled. |
1 | Host name verification is enabled. |
IceSSL skips the host name verification step if the negotiated cipher does not provide authentication (such as Anonymous Diffie Hellman ciphers), or if the proxy endpoint does not specify a host and Ice.Default.Host
is not defined. This property has no effect on a server's validation of a client's certificate.
If the host name verification is performed and fails, IceSSL aborts the connection attempt and raises an exception.
The verification ensures the host name matches the certificate's subject alternative names or the subject's CommonName
if no subject alternative names are provided. Note the following difference in behavior for this check depending on the platform or language:
if the endpoint uses an IP address: the SecureTransport, and Java implementations only match the IP against the subject alternative names, they don't check the
CommonName
if the endpoint uses a DNS name: SecureTransport on macOS 10.15 (Catalina) only matches the DNS name against the subject alternative names, it doesn't check the
CommonName
IceSSL.DefaultDir
Synopsis
IceSSL.DefaultDir=path
Description
Specifies the default directory in which to look for certificates, key stores, and other files. See the descriptions of the relevant properties for more information.
IceSSL.FindCert
Synopsis
IceSSL.FindCert=criteria
(SChannel, SecureTransport, .NET)
Description
Builds a collection of certificates that will be used for authentication.
A server requires a certificate for authentication purposes, therefore IceSSL selects the first certificate in the accumulated collection. This is normally the certificate loaded via IceSSL.CertFile
, if that property was defined. Otherwise, IceSSL selects one of the certificates identified by IceSSL.FindCert
.
Platform Notes
SChannel, .NET
IceSSL queries a certificate store for matching certificates and adds them to the application's certificate collection. The settings for IceSSL.CertStore
and IceSSL.CertStoreLocation
determine the target certificate store to be queried.
The value for criteria
may be *
, in which case all of the certificates in the store are selected. Otherwise, criteria
must be one or more field:value
pairs separated by white space. The valid field names are described below:
| Matches a substring of the issuer's name. |
| Matches the issuer's entire distinguished name. |
| Matches the certificate's serial number. |
| Matches a substring of the subject's name. |
| Matches the subject's entire distinguished name. |
| Matches the certificate's subject key identifier. |
| Matches the certificate's SHA1 hash. |
The field names are case-insensitive. If multiple criteria are specified, only certificates that match all criteria are selected. Values must be enclosed in single or double quotes to preserve white space.
SecureTransport
IceSSL queries the keychain for matching certificates and adds them to the application's certificate collection. IceSSL uses the keychain identified in IceSSL.Keychain
, or the user's default keychain if IceSSL.Keychain
is not defined.
The value for criteria
must be one or more field:value
pairs separated by white space. The valid field names are described below:
| Matches the user-visible label. |
| Matches the certificate's serial number. |
| Matches a substring of the subject's name. |
| Matches the certificate's subject key identifier. |
The field names are case-insensitive. If multiple criteria are specified, only certificates that match all criteria are selected. Values must be enclosed in single or double quotes to preserve white space.
On iOS, matching on the Subject
field is not supported.
IceSSL.Keychain
Synopsis
IceSSL.Keychain=name
(SecureTransport)
Description
Specifies the name of a keychain in which to import the certificate identified by IceSSL.CertFile
. Set IceSSL.KeychainPassword
if the specified keychain has a password.
A relative path name is opened relative to the current working directory. If the specified keychain file does not exist, a new file is created. If not defined, IceSSL uses the user's default keychain.
On iOS this property is ignored, IceSSL uses the default device keychain.
IceSSL.KeyFile
Synopsis
IceSSL.Keyfile=file
(SChannel, SecureTransport, OpenSSL)
Description
Specifies a file that contains the program's private key. The file name may be specified relative to the default directory defined by IceSSL.DefaultDir
. The corresponding certificate must be specified usingIceSSL.CertFile
.
IceSSL.KeychainPassword
Synopsis
IceSSL.KeychainPassword=password
(SecureTransport)
Description
Specifies the password for the keychain identified by IceSSL.Keychain
. If not defined, IceSSL attempts to open the keychain without a password.
On iOS, this property is ignored.
IceSSL.Password
Synopsis
IceSSL.Password=password
Description
Specifies the password necessary to decrypt the private key.
It is a security risk to use a plain-text password in a configuration file.
Platform Notes
SChannel, SecureTransport, OpenSSL
This property supplies the password that was used to secure the private key contained in the file defined by IceSSL.CertFile
.
Java
This property supplies the password that was used to secure the private key contained in the key store defined by IceSSL.Keystore
. All of the keys in the key store must use the same password.
.NET
This property supplies the password that was used to secure the file defined by IceSSL.CertFile
.
iOS
This property supplies the password that was used to secure the file defined by IceSSL.CertFile
.
IceSSL.RevocationCheck
Synopsis
IceSSL.RevocationCheck=num
(OpenSSL, SChannel, SecureTransport)
Description
Control whenever or not to check for revoked certificates:
0 | Certificate revocation checks are disabled (default) |
1 | Enable certificate revocation checks only for the leaf certificate. |
2 | Enable certificate revocation checks for the whole chain. |
Platform Notes
OpenSSL
IceSSL will use the CRL files specified by IceSSL.CertificateRevocationListFiles
for the revocation checks, if not CRL files are specified OpenSSL doesn't check certificate revocation.
SecureTransport
With SecureTransport 1 and 2 are equivalent and in both cases the whole chain is check.
IceSSL.RevocationCheckCacheOnly
Synopsis
IceSSL.RevocationCheckCacheOnly=num
(SChannel, SecureTransport)
Description
Control whenever or not the certificate revocation check is done only against the system cache without additional network calls.
0 | Certificate revocation checks only consult the system cache (default) |
1 | Certificate revocation checks can query the certificate distribution points, or the OCSP responder to obtain the certificate revocation info. |
Platform Notes
SecureTransport
The CRL distribution points are always ignored, and the AIA OCSP responder is used if present.
IceSSL.Trace.Security
Synopsis
IceSSL.Trace.Security=num
Description
The SSL plug-in trace level:
0 | No security tracing (default). |
1 | Display diagnostic information about SSL connections. |
IceSSL.TrustOnly
Synopsis
IceSSL.TrustOnly=ENTRY[;ENTRY;...]
Description
Identifies trusted and untrusted peers. This family of properties provides an additional level of authentication by using the peer certificate's distinguished name (DN) to decide whether to accept or reject a connection.
Each ENTRY
in the property value consists of relative distinguished name (RDN) components, formatted according to the rules in RFC 2253. Specifically, the components must be separated by commas, and any component that contains a comma must be escaped or enclosed in quotes. For example, the following two property definitions are equivalent:
IceSSL.TrustOnly=O="Acme, Inc.",OU=Sales
IceSSL.TrustOnly=O=Acme\, Inc.,OU="Sales"
Use a semicolon to separate multiple entries in a property:
IceSSL.TrustOnly=O=Acme\, Inc.,OU=Sales;O=Acme\, Inc.,OU=Marketing
By default, each entry represents an acceptance entry. A !
character appearing at the beginning of an entry signifies a rejection entry. The order of the entries in a property is not important.
After the SSL engine has successfully completed its authentication process, IceSSL evaluates the relevant IceSSL.TrustOnly
properties in an attempt to find an entry that matches the peer certificate's DN. For a match to be successful, the peer DN must contain an exact match for all of the RDN components in an entry. An entry may contain as many RDN components as you wish, depending on how narrowly you need to restrict access. The order of the RDN components in an entry is not important.
The connection semantics are described below:
IceSSL aborts the connection if any rejection or acceptance entries are defined and the peer does not supply a certificate.
IceSSL aborts the connection if the peer DN matches any rejection entry. (This is true even if the peer DN also matches an acceptance entry.)
IceSSL accepts the connection if the peer DN matches any acceptance entry, or if no acceptance entries are defined.
Our original example limits access to people in the sales and marketing departments:
IceSSL.TrustOnly=O=Acme\, Inc.,OU=Sales;O=Acme\, Inc.,OU=Marketing
If it later becomes necessary to deny access to certain individuals in these departments, you can add a rejection entry and restart the program:
IceSSL.TrustOnly=O=Acme\, Inc.,OU=Sales; O=Acme\, Inc.,OU=Marketing; !O=Acme\, Inc.,CN=John Smith
While testing your trust configuration, you may find it helpful to set the IceSSL.Trace.Security
property to a non-zero value, which causes IceSSL to display the DN of each peer during connection establishment.
This property affects incoming and outgoing connections. IceSSL also supports similar properties that affect only incoming connections or only outgoing connections.
IceSSL.TrustOnly.Client
Synopsis
IceSSL.TrustOnly.Client=ENTRY[;ENTRY;...]
Description
Identifies trusted and untrusted peers for outgoing (client) connections. The entries defined in this property are combined with those of IceSSL.TrustOnly
.
IceSSL.TrustOnly.Server
Synopsis
IceSSL.TrustOnly.Server=ENTRY[;ENTRY;...]
Description
Identifies trusted and untrusted peers for incoming ("server") connections. The entries defined in this property are combined with those of IceSSL.TrustOnly
. To configure trusted and untrusted peers for a particular object adapter, use IceSSL.TrustOnly.Server.AdapterName
.
IceSSL.TrustOnly.Server.AdapterName
Synopsis
IceSSL.TrustOnly.Server.AdapterName=ENTRY[;ENTRY;...]
Description
Identifies trusted and untrusted peers for incoming (server) connections to the object adapter AdapterName
. The entries defined in this property are combined with those of IceSSL.TrustOnly
and IceSSL.TrustOnly.Server
.
IceSSL.UsePlatformCAs
Synopsis
IceSSL.UsePlatformCAs=num
Description
If num
is a value greater than zero, IceSSL uses the platform's bundled Root Certificate Authorities. This setting is ignored if IceSSL.CAs
is defined.
If not defined, the default value is zero.
IceSSL.VerifyPeer
Synopsis
IceSSL.VerifyPeer=num
Description
Specifies the verification requirements to use during SSL handshaking. The legal values are shown in the table below. If this property is not defined, the default value is 2
.
0 | For an outgoing connection, the client verifies the server's certificate (if an anonymous cipher is not used). For an incoming connection, the server does not request a certificate from the client. |
1 | For an outgoing connection, the client verifies the server's certificate and aborts the connection if verification fails. For an incoming connection, the server requests a certificate from the client and verifies it if one is provided, aborting the connection if verification fails. |
2 | For an outgoing connection, the semantics are the same as for the value |
Platform Notes
.NET
This property has no effect on outgoing connections, since .NET always uses the semantics of value 2
. For an incoming connection, the value 0
has the same semantics as the value 1
.