IBM HTTP SSL Server Questions and Answers

Provide feedback on the IBM HTTP Server forum on IBM developerWorks.

Note: Cryptographic Hardware topics are largely covered here.

Certificate and certificate management FAQS

Certificate and certificate management musgather / common problems

See gather_certificate_doc.html

PKCS12 with IBM HTTP Server

See pkcs12.html

How can I summarize expiry info of many certificates?

Future levels of IHS V8R0 and later, with GSKit 8.0.50.11 or later, will support bin/gskcapicmd -cert -list -expiry which will summarize the expiration of each personal certificate.

How can I avoid putting the keystore password on the command line?

While it does not appear in the usage, bin/gskcapicmd and bin/gsk7capicmd support a -stashed parameter in lieue of the password. This works at least with PM85211 and later (7.0.4.45, 8.0.14.27).

Why doesn't an imported personal certificate show up with "trust" status?

The tooling is in error, because trust status is never applicable to personal certificates (certificates with a private key). GSKit v8 will not show trust status on any personal certificates.

Can IHS monitor certificate expiration?

Not directly, but WAS can create and manage the key store used by IHS, and it will provide monitoring of certificates and automatic renewal of self-signed certificates. To use this support, create an SSL-enabled virtual host from the WAS Admin console.

You will have to propagate the updated keystore once after you create it, and subsequently when it is updated. There is a button to propagate the keystore in the console under 'Servers > webserver1 > Web server virtual hosts > 1.2.3.4:443'

More information on certificate monitoring in WebSphere is available here: http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-nd-dist&topic=tsec_sslconfcertexpmon

By default, expiration info is written to the deployment managers SystemOut.log:

*** CERTIFICATES THAT ARE EXPIRED OR BEYOND THE EXPIRATION THRESHOLD AND HAVE BEEN REPLACED ***;
CWPKI0645I: Personal certificate alias "selfSigned" in KeyStore "webserver1((cell):ndcell:(node):node1:(server):webserver1)" was REPLACED.
...
*** CERTIFICATES THAT ARE EXPIRED OR BEYOND THE EXPIRATION THRESHOLD THAT CANNOT BE REPLACED BY THE SERVER ***;
CWPKI0643I: Personal certificate alias "not-self-signed" in KeyStore "webserver1((cell):ndcell:(node):node1:(server):webserver1)" will expire on Aug 2, 2019.

Is some action required before January 2014 if 1024 bit certificates are in use?

The nearly universal recommendation is to stop using 1024-bit RSA certificates. The NIST originally recommended a transition from 1024-bit by January 2011, and now recommends the same by January 2014.

Many certificate authorities no longer issue 1024-bit certificates, and some go as far as to say that existing 1024-bit certificates will be revoked and/or otherwise not be acepted by browsers before January 2014. Consult your certificate authority of choice for more details on revocation/renewal.

It's impossible to anticpiate when clients will begin warning about, or outright rejecting, 1024-bit certificates. There is however no good reason to stay on relatively weak keys.

SSL Proxy FAQs

SSLProxyEngine failure 8.0 and later proxy to any TLS1.2-enabled server (incl IHS 8.0 and later) with a legacy certificate

GSKit trace on the server reports "No matching alg for certificate". If the backend is IHS, it reports SSL0224E. See errorlog.html#SSL0266E

SSL Protocol FAQs

Does IHS have anything like mod_ssl's SSLHonorcipherorder?

No, IHS always uses the servers preference (acts like 'SSLHonorcipherorder on');

Does IHS support TLS_FALLBACK_SCSV?

IHS supports and sends TLS_FALLBACK_SCSV by default after PI52299 (8.5.5.9, 8.0.0.13) on distributed platforms.

Does IHS allow user configurable DHE parameters??

No, IHS only supports DHE with Elliptic Curve, and for EC in IHS GSKit only allows the use of the NIST Prime Elliptic Curves P256, P384 and P521. No user selectable parameters are allowed. GSKit selects a Curve to be Greater than or Equal to the CipherSuite Strength e.g. for a TLS_ECDHE_ECDSA_WITH_SHA256 CipherSuite curve P256 or higher can be used and for TLS_ECDHE_ECDSA_WITH_SHA384 curve P384 or higher can be used.

Does IHS use RSA's Dual Elliptic Curve Deterministic Random Bit Generation (DRBG)?

No, the Dual-EC DRBG algorithm has never been implemented by IHS.

Can I prevent IHS from sending the root certificate in the handshake?

With GSKit 7.0.4.37 / 8.0.14.12 or later, this setting in IHS will disable sending the root certificate. This is needed by some older android clients. PM66218 or later has the necessary GSKit.

SSLAttributeSet 462 1

Can I prevent SSLProxyEngine from using an "SSLv2 compatible hello/open"?

In 8.0 and later on distributed only: SSLAttributeSet proxy:439 0 ENUM

Can the SSL proxy protocols be limited or changed?

The proxy supports all protocols unless they're disabled with SSLProtocolDisable. The set cannot be controlled separately from the supported frontend protocols.

What public key lengths does ikeyman/mod_ibm_ssl support?

How can I require SHA2 ciphers?

By default, IHS 8.0 and later prefers SHA2 over TLS1.2, but will negotiate older ciphers and protocols. To completely block all connections that come in without SHA2 over TLS1.2, replace any SSLProtocol or SSLCipherSpec cusotmizations with a derivative of the examples below. This configuration should come after existing SSLEnable directives.

# SHA2-only, no ECDHE
SSLProtocolDisable TLSv10 TLSv11
SSLCipherSpec TLSv12 TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256

# SHA2-only w/ ECDHE preferred
SSLProtocolDisable TLSv10 TLSv11
SSLCipherSpec TLSV12 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
SSLCipherSpec TLSv12 +TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256

Does IHS support perfect forward secrecy (PFS)?

IHS 8.0.0.6/8.5.0.2 and later support ECDHE ciphers and keys. These ciphers provide PFS, but must be manually enabled through the SSLCipherSpec directive. After PI81589 (8.5.5.12, 8.0.0.14) these are enabled and preferred by default on distributed platforms.

Related note: In 8.5.5.5 and later, IHS can simultaneously use 1 RSA and 1 ECDSA certificate, selecting the appropriate one based on information in the TLS client hello. This is configured by providing two certificate labels to the SSLServerCert directive. The order influences the selection.

8.0 and 8.5 ECDHE examples

Below are a few example configurations for enabling ECDHE. Note that the SSLCipherSpec directives must be placed at the same level as SSLEnable, e.g. in the same virtualhost.

        #Allow ECDHE-RSA ciphers, but do not prefer them
        SSLCipherSpec TLSv12 +TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        SSLCipherSpec TLSv12 +TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        SSLCipherSpec TLSv12 +TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        SSLCipherSpec TLSv12 +TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    
        #Prefer ECDHE-RSA ciphers
        SSLCipherSpec ALL NONE
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        SSLCipherSpec ALL TLS_RSA_WITH_AES_128_GCM_SHA256
        SSLCipherSpec ALL TLS_RSA_WITH_AES_256_GCM_SHA384
        SSLCipherSpec ALL TLS_RSA_WITH_AES_128_CBC_SHA256
        SSLCipherSpec ALL TLS_RSA_WITH_AES_256_CBC_SHA256
        SSLCipherSpec ALL TLS_RSA_WITH_AES_128_CBC_SHA
        SSLCipherSpec ALL TLS_RSA_WITH_AES_256_CBC_SHA
        SSLCipherSpec ALL SSL_RSA_WITH_3DES_EDE_CBC_SHA
    
        #Require ECDHE-RSA ciphers - not recommended, many clients still
        # do not support ECDHE
        SSLProtocolDisable SSLv2 SSLv3 TLSv10 TLSv11
        SSLCipherSpec ALL NONE
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        SSLCipherSpec TLSv12 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
    

Note that the ECDHE ciphers in the examples above are only a subset of the ones IHS supports. For the full list, refer to the infocenter.

V9 ECDHE cipher manipulation examples

In Version 9 and later, ECDHE is enabled by default and preferred over RSA. Example config changes follow:

    # Disable ECDHE in V9
    SSLCipherSpec ALL -TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 -TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 -TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
    SSLCipherSpec ALL -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 -TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA -TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
    SSLCipherSpec ALL -TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 -TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    SSLCipherSpec ALL -TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 -TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    SSLCipherSpec ALL -TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA -TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA -TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
    # Prefer RSA in V9

    # Step 1: Remove the defaults
    SSLCipherSpec ALL -TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 -TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 -TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
    SSLCipherSpec ALL -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 -TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA -TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA -TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
    SSLCipherSpec ALL -TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 -TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    SSLCipherSpec ALL -TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 -TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    SSLCipherSpec ALL -TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA -TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA -TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA

    # Step 2: Append the same ECDHE ciphers
    SSLCipherSpec ALL +TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 +TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
    SSLCipherSpec ALL +TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 +TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA +TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA +TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA
    SSLCipherSpec ALL +TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 +TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    SSLCipherSpec ALL +TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 +TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
    SSLCipherSpec ALL +TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA +TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA +TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA

Does IHS support DSA certificates?

IHS only supports RSA_RSA, ECDHE_RSA, and ECDHE_ECDSA and no other combinations (such as those including DH or DSA).

The Java key management utility, keytool, will create DSA certificates by default, see the JSSE FAQ for more info.

What restrictions are placed on ikeyman passwords?

How can I disable support for NULL / Plaintext ciphers?

Specifying any SSLv3/TLSv1 ciphers as illustrated in the performance guide will disable support for the NULL/Plaintext ciphers, provided you don't explicitly enumerate the following ciphers:

SSL_RSA_WITH_NULL_SHA (30)
SSL_RSA_WITH_NULL_MD5 (31)
SSL_NULL_WITH_NULL_NULL (32)
Note: The following releases disable NULL ciphers by default:

How can I disable support for SSLv2?

SSLProtocolDisable is supported in 6.0.2.13, 6.1.0.2, 7.0.0.0 and later.

Is SSLProtocolDisable negated if a SSLCipherSpec is declared for a cipher within the protocol being disabled?

For example:
SSLProtocolDisable SSLv2                                                
SSLCipherSpec ALL 21

The SSLProtocolDisable directive supercedes the selecting of the ciphers. It is applied 'after' cipher selection, so it is not negated by specifying a cipher within the protocol to be disabled.

How does IHS use the close_notify SSL alert?

IHS does not initiate a close_notify alert during the shutdown of a connection, but will respond to a client's close_notify with one of its own. This behavior is not configurable.

In some non-keepalive cases, IHS cannot respond to a close_notify alert because IHS has already shutdown the connection for writing, which will send a FIN to the client. In this case, the client must react to the FIN instead of wait for a response to the close_notify.

Some non-browser clients (observed with an F5 load balancer) might not close their end of the connection when the FIN is sent from IHS but instead wait for a close_notify alert. This can cause an accumulation of sockets in FIN_WAIT_2 on the IHS system. No response of any type can be sent after the FIN, so the client should not wait for the close_notify.

How can I test if my server supports a specific SSL protocol?

Two common command line tools can help you test which SSL protocols your server is configured to use.
openssl
If a protocol is enabled, the openssl s_client command will wait for input (or Control-D). If the protocol is disabled, openssl will report an exception similiar to the one reproduced below:
21112:error:1407F0E5:SSL routines:SSL2_WRITE:ssl handshake failure:s2_pkt.c:428:
Openssl examples:
openssl s_client -connect ihshostname:443 -ssl2
openssl s_client -connect ihshostname:443 -ssl3
openssl s_client -connect ihshostname:443 -tls1
curl
If a protocol is enabled, curl will display the URL as requested. If the protocol is disabled, will report an error message similiar to the one reproduced below:
curl: (35) Unknown SSL protocol error in connection to ihshostname:443
Curl examples
curl -vk -2 https://ihshostname 
curl -vk -3 https://ihshostname 
# -1 tests for TLSv1
curl -vk -1 https://ihshostname 
For more information see: How can I disable support for SSLv2?

What is the behavior of using 'ALL' for the protocol_name argument of the SSLCipherSpec directive?

In IHS 8.0 and higher, there is a new multi-argument form of the SSLCipherSpec directive which takes a protocol_name value as the first argument.
You can specify the name of an SSL protocol (or 'ALL') as the value of this argument.
For more information, refer to the 'SSL Directives' section of the Information Center documentation for your version of IBM HTTP Server.

Using the new syntax with 'ALL' followed by a single cipher is similar to leaving off 'ALL' and using the legacy syntax.

Both of "SSLCipherSpec 3A" and "SSLCipherSpec ALL 3A" resets all protocols which 3A supports (SSLV3, TLSV10, TLSv11, TLSv12) to zero ciphers, then adds 3A.

For TLSv12, this results in turning off the most advanced ciphers. This is why we are emphasizing the importance of the protocol_name argument in the V8.0 and higher syntax.

How do I enable strong encryption on z/OS?

Strong encryption (128-bit and above) is available when the "z/OS Security Level 3" unpriced optional feature has been installed. Without this feature, IHS is limited to the RSA ciphers listed in Table 1 of the System SSL Programming guide.

Does IHS support TLSv1.1 or later?

IHS 7.0 (and earlier) cannot negotiate TLSv1.1 or TLSv1.2 connections.

IBM HTTP Server 8.0 and later supports TLSv1.1 and TLSv1.2 whenever SSL is enabled. Prior to PI27904, IHS on z/OS required TLSv1.1 and TLSv1.2 be explicitly enabled.

Does IHS support TLS Server Name Indication (SNI)?

Server Name Indication (SNI) is supported in IHS 9.0 and later. IHS uses SNI for inbound connections only, to map the hostname in the SNI extension to a certificate label.

Outbound SSL connections via the WAS Plug-in or mod_proxy (w/ SSLProxyEngine ON) do not send an SNI extension.

Does IHS support signed OCSP requests?

No.

Does IHS support OCSP Stapling?

No.

Does IHS support SSL Renegotiation?

IHS VersionRenegotiation behavior
IHS 6.1.0.27 / 6.0.2.37 / 7.0.0.7 and earlier legacy renegotiation enabled by default
IHS 6.1.0.29 / 6.0.2.39 / 7.0.0.9 and laterlegacy renegotiation disabled by default, legacy can be enabled
IHS 8.0.0.0 RFC5746 supported, signaled, and accepted by default. Legacy can be enabled
IHS 8.0.0.1 and laterRFC5746 renegotiation supported, signaled but not accepted by default. Legacy can be enabled

If you update GSKit to an RFC5746 renegotiation aware level (7.0.4.38 or later) without updating to an IHS aware of RFC5746 renegotiation, RFC5746 renegotiation is enabled.

Does IHS support TLS Renegotiation Indication (RFC 5746)?

IHS VersionRFC5746 behavior
IHS 7.0 and earlier Not supported
IHS 7.0.0.19 / 6.1.0.41Supported, signaled but not accepted by default
IHS 8.0.0.0 Supported, signaled, and accepted by default
IHS 8.0.0.1 and laterSupported, signaled but not accepted by default

Does IHS support TLS compression / SSL Compression?

Does IHS support ECC certificates?

Only in V8R0 and later with PM80235. The only supported curves are secp256r1, secp384r1, and secp521r1 (RFC4492 names).

What are the ramifications of using large (2048-bit) RSA keys?

When the key size doubles, the CPU overhead of a full SSL handshake can increase by 8-12 times. Abbreviated (reused) handshakes are not affected by the change in key size.

As SSL handshakes (as opposed to block/bulk encryption or other processing overhead) can account for almost none, or almost all, of your overall CPU usage, it is critical to performance tests new certificates which contain larger keypairs under realistic workloads to determine the net change in CPU usage.

Can IHS use SHA-2 (sha224, sha256, sha384, sha512) digest algorithms?

Why does Internet Explorer 7 not prompt for a client certificate but other browsers do?

see #longhandshake

Do the Triple DES ciphers in IHS use two or three independent keys?

Triple DES comes in a 2-key and 3-key form, but the cipher as defined in SSL/TLS is always of the 3-key form (generally assesed at a strength of 112 bits, vs. 80 for 2-key).

Why doesn't the above paragraph say 168 bit? We're not cryptographers, but the effective and actual number of bits in a cryptographic algorithm differ.

What ciphers does IBM recommend?

Neither IBM customer or product support is tasked with determining TLS settings acceptable to individual customers. General recommendations that customers should review against their own policies, clients, data, and applications follows. It is generally consistent with the recommendations in the Qualsys TLS deployment best practices as of the December 2014 update.

Other significant recommended SSL APARs:

History:

How can I resolve a "CBC" vulnerability reported by a security scanner?

Simply put, you can't even begin to address a generically stated "CBC" problem without more specifics (such as a CVE number). If a scanner reports some problem with a "CBC" cipher enabled, they could be referring to any one of a number of historic or contemporary issues with different actions required.

How can I disable CBC ciphers to protect unmaintained clients from BEAST (CVE-2011-3389) or to satisfy my security scanner?

We do not recommend taking BEAST countermeasures (disabling CBC ciphers) on the server.

When BEAST was first disclosed in 2011, the short-term remediation was disabling all CBC ciphers. In TLS1.0, the highest protocol with broad browser support, all ciphers except for RC4 are CBC ciphers. Fast-forward to 2014, and browsers have long since had BEAST circumventions and RC4 is considered too weak for sites requiring even moderate levels of TLS security.

References:

History:

How can I check the end result of my SSL configuration changes to verify what prototcols and ciphers my server will use ?

In IHS 8.0 and later:

If there is a question of how your configuration customizations are ultimately combined, you can run
 apachectl -t -DDUMP_SSL_CONFIG
to see the effective values after processing the configuration.
 
Example output of the default configuration + SSLEnable is:             
                                                                        
SSL server defined at:                                                  
/home/ihs/2.2/built/conf/httpd.conf:907                       
Server name: 127.0.1.1:443                                              
SSL enabled: YES                                                        
FIPS enabled: 0                                                         
Keyfile: /home/ihs/IHSJTest/data/ihskeys/key.kdb                
Protocols enabled: SSLV2,SSLV3,TLSv10,TLSv11,TLSv12                     
Ciphers for SSLV2: (defaults)                                           
Ciphers for SSLV3: (defaults)                                           
TLS_RSA_WITH_AES_128_CBC_SHA(2F),TLS_RSA_WITH_AES_256_CBC_SHA(35b),S    
SL_RSA_WITH_RC4_128_SHA(35),SSL_RSA_WITH_RC4_128_MD5(34),SSL_RSA_WIT    
H_3DES_EDE_CBC_SHA(3A)                                                  
Ciphers for TLSv10: (defaults)                                          
TLS_RSA_WITH_AES_128_CBC_SHA(2F),TLS_RSA_WITH_AES_256_CBC_SHA(35b),S    
SL_RSA_WITH_RC4_128_SHA(35),SSL_RSA_WITH_RC4_128_MD5(34),SSL_RSA_WIT    
H_3DES_EDE_CBC_SHA(3A)                                                  
Ciphers for TLSv11: (defaults)                                          
TLS_RSA_WITH_AES_128_CBC_SHA(2F),TLS_RSA_WITH_AES_256_CBC_SHA(35b),S    
SL_RSA_WITH_RC4_128_SHA(35),SSL_RSA_WITH_RC4_128_MD5(34),SSL_RSA_WIT    
H_3DES_EDE_CBC_SHA(3A)                                                  
Ciphers for TLSv12: (defaults)                                          
TLS_RSA_WITH_AES_128_GCM_SHA256(9C),TLS_RSA_WITH_AES_256_GCM_SHA384     
(9D),TLS_RSA_WITH_AES_128_CBC_SHA256(3C),TLS_RSA_WITH_AES_256_CBC_S     
HA256(3D),TLS_RSA_WITH_AES_128_CBC_SHA(2F),TLS_RSA_WITH_AES_256_CBC     
_SHA(35b),SSL_RSA_WITH_3DES_EDE_CBC_SHA(3A) 

                            
(Note: we report SSLv2 as enabled with zero available ciphers as an     
implementation quirk)                                                   

General SSL FAQs

How can I implement HTTP Public Key Pinning (HPKP) with IHS?

You can manually set the "Public-Key-Pins" header with IHS (as with other webservers), but if you're following instructions meant for Apache+OpenSSL you'd have to start by using ikeyman, gskcmd, or gskcapicmd to extract the certificates for which you'd like to send a PIN. Once you have the certificates saved to a flat file, the openssl command line utility can be used to generate the pin-sha256 value.

It's imperative that you learn about the meaning and repercussions of HPKP before performing this setup, and that you integrate HPKP changes into your procedure for certificate changes.

A sample java program that obtains pin-sha256 values from an IBM CMS *.kdb key store is available here: https://github.com/covener/certutil/

Does IHS support HSTS / strict transport security?

See questions.html#HSTS

Does IHS support AES-NI acceletion?

IHS 8.0 and later support AES-NI acceleration when the non-FIPS ICC library in GSKit is used. This can be enabled by setting export ICC_IGNORE_FIPS=YES in $IHSROOT/bin/envvars and doing a full stop and start. AES-NI is implicitly

ICC_IGNORE_FIPS is not be required after PI09443 (8.0.0.9, 8.5.5.2) which is available as a published interim fix.

mod_rewrite: How can I redirect all non-SSL requests to SSL?

Here is an example where all requests received on port 80 are redirected to the SSL port. Replace www.example.com with the hostname of your server. The new VirtualHost container will automatically apply to any requests received on the specified port (80), and mod_rewrite will always redirect these requests to the https (SSL) equivalent.

<VirtualHost *:80>
RewriteEngine on
RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]
</VirtualHost>

Important: If using HTTP authentication, make sure it is only configured for your SSL virtual host. If it also applies to your port 80 requests, the authentication challenge can pre-empt the rewrite, resulting in userids and passwords being sent over an unencrypted session.

It is also recommended that you configure your port 80 virtual host with a different document root etc. from your SSL virtual host. This is to be sure that even if your rewrite fails, sensitive information cannot be served from that virtual host over unencrypted sessions.

Why can't root install GSKit on solaris?

See questions.html#gskitinstall

How many SSL Session IDs can IHS cache?

See SSL Tuning

What is the SSL Session ID Cache?

Negotiating new SSL sessions can be costly in terms of CPU usage and latency. A previously negotiated SSL session can be be reused by a client, but this requires some state to be saved by the server. Because IHS is multi-process and a new connection can be handled by a different process then where the previous handshake occurred, IHS uses a cross-process session cache (sidd). This replaces the built-in per-process session cache used by GSKit.

The validity period of the cached SSL session is not reset when an SSL session is reused. In 8.5.5.9 (but not later fixpacks) the time is reset when an SSL session is reused.

How can I require SSL client certificates (mutual SSL authentication) only on some URLs in a VirtualHost?

This cannot be easily accomplished because there is no support for telling the web browser to "try again with a client certificate." This also will not work with TLS 1.3 as SSL renegotiation is prohibited. The following recipe is one way to simulate this behavior without using an additional virtual host, which would involve redirecting select URLs to the alternate virtual host.

  1. Set SSLClientAuth optional in your virtual host
  2. Use mod_rewrite to check one of the SSL client certificate environment variables:
    RewriteEngine on
    RewriteCond %{ENV:SSL_CLIENT_CERTBODYLEN} ^$
    RewriteCond %{REQUEST_URI} !^/error/
    RewriteRule /secure/ /certrequired.html [PT]
    
  3. Provide an HTML page (/certrequired.html in the previous step) describing what your users need to do get a certificate. Note that users would probably have to close and reopen their web browser before they'd be able to select a client certificate, which can only happen at the beginning of a new handshake.

(See this question for why we exclude error documents from the rule.)

How can I require a specific SSL Client certificate by serial number?

Why must IP-based virtual hosting be used when multiple SSL virtual hosts are supported?

IHS cannot choose a certificate or ciphers based on name-based virtual host configuration. This technote describes the configuration requirements:

Why?

A TLS extension has been defined in RFC 3546 which allows selection of the virtual host during the handshake, avoiding this dependence on IP addresses. In the coming years we'll see browsers which are able to support this TLS extension, but it will be a very long time before an customers could rely on that because older browsers would be unable to participate.

If you have a certificate that applies to all of your name-based vhosts, and you don't require any separate SSL configuration across the set of name-based vhosts, you can just fully configure SSL in the first one then configure just SSLEnable in all the subsequent ones.

Note: It is the IP address/port combination which must be unique. You could support multiple SSL-enabled virtual hosts on the same IP address if they differ in port number, but that would require that clients specify the port number in https URLs for all but one of the SSL-enabled virtual hosts.

How can the other SSL access control directives be used to limit access?

Per-directory SSL access control directives

Unfortunately, the restrictions configured with SSLCipherBan, SSLCipherRequire, and SSLVersion do not influence the actual SSL handshake and are only checked later on during request processing. No SSL renegotiation is triggered by these directives, and instead the configured 403 error response is issued at the application level. This 403 response may be difficult to distinguish from 403 errors triggered by other authorization or access control directives.

As an example of why SSLVersion is difficult to implement, if you use SSLVersion SSLv3 (or SSLv2) and a browser connects with a "stronger" protocol, not only do they get a generic 403 response but the user would have to take some action to disable the stronger/preferred SSL protocols in their browser to be able to reconnect. Using SSLVersion TLSv1, which requires the latest SSL protocol, sends clients without TLSv1 support a generic 403 response. This 403 response can be customized with the ErrorDocument directive but it is not distinguishable from other access control errors in the same context.

Because of the limitations of SSLCipherBan, SSLCipherRequire, and SSLVersion, using mod_rewrite to analyze the SSL environment variables (HTTPS_CIPHER, SSL_PROTOCOL_VERSION, HTTPS_KEYSIZE) is much more flexible.

per-vhost SSL handshake directives

SSLCipherSpec and SSLProtocolDisable influence the SSL handshake itself, and as a consequence are only available in a per-vhost basis. While it's normally safe to limit cipher support to "128-bit or higher ciphers" or to disable SSLv2, we do not recommend restricting access much further than this with SSLCipherSpec and SSLProtocolDisable. Instead, use mod_rewrite as illustrated above to enforce more restrictive access control; otherwise IHS and the browser may not be able to negotiate a secure channel and users may not see a descriptive error message from their browser.

How can I display a custom document when a client connects with a weak cipher?

This is an alternative to shutting out very old clients that might not be able to negotiate a strong cipher.

  1. Configure your server to prefer stronger ciphers as described in the SSL Performance section of the IHS Performance tuning guide.
  2. Append any weak ciphers you wish to support (list of ciphers) using SSLCipherSpec
  3. Determine the SSL criteria you want to enforce (e.g. keysize, protocol version) and the set of URLs for which it applies.

Examples

(See this question for why we exclude error documents from the rule.)

How can I display a custom document when a client connects over SSLv2?

Instead of using mod_ibm_ssl SSLCipherSpec directives to allow only SSLv3 and TLSv1 ciphers, use mod_rewrite to recognize when SSLv2 is used, and redirect the request to a document explaining the restriction.

Example:

RewriteEngine On
RewriteCond %{ENV:SSL_PROTOCOL_VERSION} ^SSLV2$
RewriteCond %{REQUEST_URI} !^/error/
RewriteRule .* /low_grade_encryption.html

How can I apply other rules based on attributes of SSL ciphers?

RewriteEngine On
RewriteCond %{ENV:HTTPS_CIPHER} !AES
RewriteCond %{REQUEST_URI} !^/error/
RewriteRule ^/secret1/  /AES_only.html

RewriteCond %{ENV:HTTPS_CIPHER} MD5
RewriteCond %{REQUEST_URI} !^/error/
RewriteRule ^/secret2/  /no_md5.html

(See this question for why we exclude error documents from the rule.)

What is a substitute for mod_ssl's SSLRequireSSL directive?

The SSLRequireSSL directive is not supported with any level of IHS. IHS uses a different SSL implementation than available for Apache 1.3 or Apache 2.0.

Instead of using the SSLRequireSSL directive to specify that certain files or directories can only be served over SSL, a customer can achieve the same result in different manner, by denying access to the file or directory in the non-SSL configuration. In following example, files under URI /onlyssl can only be served over SSL:

...                                                                     
# /onlyssl can't be served by default
<Location /onlyssl>                                                     
 Order Allow,Deny                                                       
 Deny from all                                                          
</Location>                                                             
...                                                                     
<VirtualHost *:443>                                                     
SSLEnable                                                               
...                                                                     
# put this config for /onlyssl inside all SSL-enabled                   
# VirtualHost containers                                                
<Location /onlyssl>                                                     
  Order Allow,Deny                                                      
  Allow from all                                                        
</Location>                                                             
</VirtualHost> 
...

How can I see which cipher specification was negotiated for a specific request?

in access log

  1. Change the LogFormat directive to include the cipher specification as part of the information logged for each request. The format string %{HTTPS_CIPHER}e will log the name of the cipher (e.g, TLS_RSA_WITH_AES_256_CBC_SHA). Ensure that the LogFormat directive which is changed is for the format used on the CustomLog directive.

    Example:

    LogFormat "%h %l %u %t \"%r\" %>s %b %{HTTPS_CIPHER}e" common 
    CustomLog logs/access_log common 
    
  2. Look in the access log to find the cipher used. The position of the cipher will depend on where the %{HTTPS_CIPHER}e format string was placed in the LogFormat directive. Using the example LogFormat directive above, here are example access_log entries:
    9.48.108.152 - - [17/Feb/2005:15:37:39 -0500] "GET / HTTP/1.1" 200 1507 SSL_RSA_WITH_RC4_128_SHA 
    9.48.108.152 - - [17/Feb/2005:15:37:40 -0500] "GET /httpTech.view1.gif HTTP/1.1" 200 1814 SSL_RSA_WITH_RC4_128_SHA
    9.48.108.152 - - [17/Feb/2005:15:37:40 -0500] "GET /httpTech.masthead.gif HTTP/1.1" 200 11844 SSL_RSA_WITH_RC4_128_SHA 
    9.48.108.152 - - [17/Feb/2005:15:37:41 -0500] "GET /httpTech.visit1.gif HTTP/1.1" 200 1457 SSL_RSA_WITH_RC4_128_SHA 
    

    For non-secure requests, "-" will be logged for the cipher specification.

The key size can be logged with the %{HTTPS_KEYSIZE}e format string. See the section on SSL environment variables in the IBM HTTP Server InfoCenter for information about other SSL environment variables which can be logged. See the documentation for the LogFormat and CustomLog directives for more information about format strings in general.

with Wireshark

A manual way to check this is to use Wireshark on the client system and start a packet trace capture. Then load the web page with your choice of web browser. Then stop the capture in Wireshark and look for the Server "Hello" response. This will appear in the packet window like this:

  1.750088  server-ip-address client-ip-address TLS   Server Hello, Certificate, [Unreassembled Packet]

Select that packet, then look for the "Handshake Protocol" information in the next window:

    Handshake Protocol: Server Hello
        Handshake Type: Server Hello (2)
        Length: 70
        Version: TLS 1.0 (0x0301)
        Random.gmt_unix_time: Apr  8, 2005 14:15:33.00000000
        Random.bytes
        Session ID Length: 32
        Session ID (32 bytes)
        Cipher Suite: TLS_RSA_WITH_RC4_128_MD5 (0x0004)
        Compression Method: null (0)

Check the display of the cipher suite.

Consult the Wireshark documentation for further information about using that tool.

with openssl command-line client

If you have the openssl command-line client (not part of IHS, but distributed at www.openssl.org), that can display the cipher used as well, for an SSL session established by that command-line client.

To see which cipher is selected for the request, run openssl s_client -connect IPADDR:PORT and look for this part of the output:

New, TLSv1/SSLv3, Cipher is AES256-SHA

The symbolic names for the ciphers as displayed by openssl are are not the same symbolic names used by IHS. Here are the openssl names for common ciphers used with IHS:

IHS name OpenSSL name
TLS_RSA_WITH_AES_256_CBC_SHA AES256-SHA
TLS_RSA_WITH_AES_128_CBC_SHA AES128-SHA
SSL_RSA_WITH_RC4_128_SHA RC4-SHA
SSL_RSA_WITH_RC4_128_MD5 RC4-MD5
TLS_RSA_EXPORT1024_WITH_RC4_56_SHA EXP1024-DES-CBC-SHA
TLS_RSA_EXPORT1024_WITH_DES_CBC_SHA EXP1024-RC4-SHA
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 EXP-RC2-CBC-MD5
SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 EXP-RC2-CBC-MD5
SSL_RSA_EXPORT_WITH_RC4_40_MD5 EXP-RC4-MD5

The openssl client supports many ciphers which are not supported by IHS.

openssl will hold the connection open until you interrupt it with the EOF character (usually <Ctrl>D on Unix systems).

You can restrict the openssl client to a particular cipher to see if IHS supports it, using the -cipher CIPHERNAME option.

Consult the OpenSSL documentation for further information about using the openssl command-line tool.

How can I perform access control with details from the SSL client certificate?

mod_ibm_ssl provides a set of access control directives that can be difficult to use (SSLClientAuthRequire, SSLClientAuthGroup). Instead, we recommend using mod_rewrite to inspect the SSL Client Certificate environment variables for access control.

The environment variables available for use in RewriteCond directives are listed in the table here. Note that many fields in the client certificate are optional and may be empty.

Example configurations

All example configurations should be placed inside a VirtualHost container with

<VirtualHost ...>
SSLEnable
SSLClientAuth required
RewriteEngine on
<VirtualHost>

Examples

(See this question for why we exclude error documents from the rule.)

To identify the fields of interest in your users' certificates, a test environment can be used that logs client certificate details to the access log.

Note: This is 1 very long line followed by a shorter line.

LogFormat "%h SSL_SERVER_C=%{SSL_SERVER_C}e SSL_CLIENT_C=%{SSL_CLIENT_C}e SSL_CLIENT_IC=%{SSL_CLIENT_IC}e SSL_SERVER_CN=%{SSL_SERVER_CN}e SSL_CLIENT_CN=%{SSL_CLIENT_CN}e SSL_CLIENT_ICN=%{SSL_CLIENT_ICN}e SSL_SERVER_DN=%{SSL_SERVER_DN}e SSL_CLIENT_DN=%{SSL_CLIENT_DN}e SSL_CLIENT_IDN=%{SSL_CLIENT_IDN}e SSL_SERVER_EMAIL=%{SSL_SERVER_EMAIL}e SSL_CLIENT_EMAIL=%{SSL_CLIENT_EMAIL}e SSL_CLIENT_IEMAIL=%{SSL_CLIENT_IEMAIL}e SSL_SERVER_L=%{SSL_SERVER_L}e SSL_CLIENT_L=%{SSL_CLIENT_L}e SSL_CLIENT_IL=%{SSL_CLIENT_IL}e SSL_SERVER_O=%{SSL_SERVER_O}e SSL_CLIENT_O=%{SSL_CLIENT_O}e SSL_CLIENT_IO=%{SSL_CLIENT_IO}e SSL_SERVER_OU=%{SSL_SERVER_OU}e SSL_CLIENT_OU=%{SSL_CLIENT_OU}e SSL_CLIENT_IOU=%{SSL_CLIENT_IOU}e SSL_SERVER_ST=%{SSL_SERVER_ST}e SSL_CLIENT_ST=%{SSL_CLIENT_ST}e SSL_CLIENT_IST=%{SSL_CLIENT_IST}e SSL_CLIENT_CERTBODY=%{SSL_CLIENT_CERTBODY}e SSL_CLIENT_CERTBODYLEN=%{SSL_CLIENT_CERTBODYLEN}e SSL_CLIENT_SESSIONID=%{SSL_CLIENT_SESSIONID}e SSL_CLIENT_SERIALNUM=%{SSL_CLIENT_SERIALNUM}e HTTPS=%{HTTPS}e HTTPS_CIPHER=%{HTTPS_CIPHER}e HTTPS_KEYSIZE=%{HTTPS_KEYSIZE}e HTTPS_SECRETKEYSIZE=%{HTTPS_SECRETKEYSIZE}e SSL_PROTOCOL_VERSION=%{SSL_PROTOCOL_VERSION}e %l %u %t \"%r\" %>s %b" client_cert_info CustomLog logs/certinfo.log client_cert_info

Notes

How do I know if my cryptographic accelerator is working?

When SSLPKCSDriver is specified, IHS/GSKit will not fallback to using software-based RSA crypto. For further confirmation, consult the list below.

How do I know if OCSP is working?

Can I provide a custom error page for SSL handshake failures?

IBM HTTP Server 7.0 and earlier: No, if the SSL handshake fails, there is no client-server connection that the server could use to send a custom error page response. The client browser is responsible for notifying the user of the error.

IBM HTTP Server 8.0 and later: See the SSLClientAuthVerify directive in the infocenter.

Does IHS support Subject Alternate Names on certificates?

If your server certificate includes Subject Alternate Names (SANs), they are part of the certificate and will be passed to SSL clients by any version of IHS. It is up to the client whether it recognizes the SANs and handles them properly, though most modern browsers will.

You can generate Certificate Signing Requests (CSRs) with SANs using gsk7cmd (command line) or the ikeyman graphical application. Note, though, that the Certificate Authority (CA) is not required to recognize the SAN in your CSR. If the CA ignores it, then the signed certificate will not include the SAN.

Setup

There is some one-time setup necessary in order to be sure you're using the latest tools and the SAN options are displayed.

IHS v8 and later

No manual setup is required.

IHS v7 setup

Generating a CSR with SANs using the command line gsk7cmd tool

The gsk7capicmd command-line tool in IHS v6.1 and v7 does not support Subject Alternate Names.

Generating a CSR with SANs using the graphical ikeyman application

Does IHS support generating certificate requests with other Extended Key Usage (EKU) fields?

Only IHS v8 and later, and only with the gskcapicmd command line utility. See the -eku option.

Some browsers fail to handshake with my IHS server, and I am using client certificate authentication and have a lot of certificate authorities in my server key database

Some browsers seem to have a bug handling very long SSL server handshake messages.

The size of the server's SSL handshake message when requesting a client certificate depends on how many CA's it has. If it exceeds 16K, the SSL protocol requires it to be split into multiple SSL "records", which seems to confuse some browsers.

As of July 2010, here's how things look:

Internet Explorer 7&8
Fails and sends a FIN packet to close the connection.
Firefox (Latest version)
Successfully shows the client authentication prompt.
Chrome (5.0.375.99)
Successfully shows the client authentication prompt.
Opera (Latest version)
Successfully shows the client authentication prompt.

You can observe this happening with SSLTrace

SSL handshake initiated [x:3360 -> y:443] [20:52:35.000704700]
SSL read begin bytes [5] timeout [300000000]
SSL read end bytes [5] err [0] to [0] eof [0]
                    ^ start of new SSL record
SSL read begin bytes [65] timeout [300000000]
SSL read end bytes [65] err [0] to [0] eof [0]
                    ^ client hello
SSL write begin bytes [16389] timeout [300000000]
SSL write end bytes [16389] err [0] to [0]
                     ^ maximum size of SSL record in first write of handshake
SSL write begin bytes [485] timeout [300000000]
SSL write end bytes [485] err [0] to [0]
                     ^ immediate subsequent write for remainder

Complicating the issue at this time, Wireshark also seems to have a bug understanding these long messages, so looking at a packet trace in Wireshark might suggest that the message itself is incorrect. (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3303). However, GSKit support has carefully examined traces in this situation and verified that IHS and GSKit are sending the correct messages, according to the RFC.

Some possible remediations:

For more information, you can see this KB article: 933430 Clients cannot make connections if you require client certificates on a Web site or if you use IAS in Windows Server 2003, though the fix there only increases the limit to a single full SSL record, 16384 bytes. This blog entry from Jonathan Stephens describes the current problem as well.

Why are my users seeing my custom SSL error pages when they've connected with a valid SSL connection?

If the server configuration is using mod_rewrite to test characteristics of SSL connections, be sure those rules aren't being applied to HTTP error documents. Here's what can happen:

  1. Browser requests a page that doesn't exist, using a valid SSL connection
  2. Server redirects the request to an HTTP error document, e.g. /error/HTTP_NOT_FOUND.html, to tell the user about the problem
  3. mod_rewrite rules think the connection doesn't meet the SSL characteristic required, and redirects again to your custom SSL error page

The cause of the problem is that the internal SSL environment variables often tested in mod_rewrite rules are no longer available after the internal redirect to an HTTP error document. So a test like this fails:

RewriteCond %{ENV:SSL_CLIENT_O} !^Acme$
RewriteRule ^ /Acme_employees_only.html

The test is intended to redirect all non-Acme employees to a special page, but it does not find an SSL_CLIENT_O variable set to Acme after the internal redirect, so Acme employees who make a typo in a URL end up at a page telling them they're not Acme employees.

The solution is to not apply the mod_rewrite rules to error documents. If the error documents' URLs start with /error/, then the rules above could be fixed like this:

RewriteCond %{ENV:SSL_CLIENT_O} !^Acme$
RewriteCond %{REQUEST_URI} !^/error/
RewriteRule ^ /Acme_employees_only.html

How can I choose a Signature Algorithm?

Some Certificate Authorities (CAs) require that you create your Certificate Signing Request (CSR) with a particular signature algorithm and/or signature algorithm key size. It's important to recognize a few things about the chosen CSR algorithm.

Refer to the 'Can IHS use SHA-2 (sha224, sha256, sha384, sha512) digest algorithms?' section for additional information about using SHA2 signature algorithms.

Reference manuals for certificate management tools

How can I force CRL data to be retrieved over LDAP v3?

IHS 8.0 and later: IHS directive SSLAttributeSet 314 3 NUMERIC in the appropriate SSL enabled virtual host..

IHS 7.0 and earlier: export GSK_LDAP_VERSION=3 in the native environment (bin/envvars).

How can I remove 3DES from the default list of ciphers on z/OS?

Before PI73819, the advanced syntax to remove specific ciphers is not valid on z/OS. The only way to remove the 3DES cipher from the default list is to respecify all other default ciphers. The ciphers below are the default ciphers as of 2017/01. For IBM HTTP Server 9.0 and above (after PI73819, applies to all platforms):
  SSLCipherSpec ALL -SSL_RSA_WITH_3DES_EDE_CBC_SHA -TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA -TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA
For IBM HTTP Server 9.0 and above (before PI73819, z/OS):
# Enable all default ciphers except the 3DES cipher suite on z/OS for IHS 9.0+.
SSLCipherSpec TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
SSLCipherSpec TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
SSLCipherSpec TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
SSLCipherSpec TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
SSLCipherSpec TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
SSLCipherSpec TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
SSLCipherSpec TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
SSLCipherSpec TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
SSLCipherSpec TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
SSLCipherSpec TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
SSLCipherSpec TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
SSLCipherSpec TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
SSLCipherSpec TLS_RSA_WITH_AES_256_GCM_SHA384
SSLCipherSpec TLS_RSA_WITH_AES_128_GCM_SHA256
SSLCipherSpec TLS_RSA_WITH_AES_256_CBC_SHA256
SSLCipherSpec TLS_RSA_WITH_AES_128_CBC_SHA256
SSLCipherSpec TLS_RSA_WITH_AES_256_CBC_SHA
SSLCipherSpec TLS_RSA_WITH_AES_128_CBC_SHA
For IBM HTTP Server 8.0 and 8.5.5 (z/OS):
# Enable all default ciphers except the 3DES cipher suite on z/OS for IHS 8.0 and 8.5.5.
SSLCipherSpec TLS_RSA_WITH_AES_128_CBC_SHA
SSLCipherSpec TLS_RSA_WITH_AES_256_CBC_SHA

Note: The default cipher list for IBM HTTP Server 8.0 and 8.5.5 is limited on z/OS because the other ciphers require access to ICSF. Additionally, ECDSA ciphers are not enabled by default before IBM HTTP Server 9.0. All supported ciphers can still be enabled, including the above defaults used for 9.0.