Since there is not much out there in terms and easy guide to follow, on this activity we are going to configure an Oracle RAC cluster to allow TLS encrypted connections.
Because SCAN listeners redirect you to the local listeners on each server, we also need to setup the local listeners.

Here we are going to create self-signed certificates, we are not going to get certificate signed by the CA, this is not the goal here (you can search how to do it if you need….)

This is the environment:

	[oracle@RACnode1 ~]$ olsnodes
	racnode1
	racnode2
	[oracle@RACnode1 ~]$
	
	Scan:
	[oracle@RACnode1 ~]$ grep -i racnode-scan /etc/hosts
	192.168.24.41 racnode-scan.localdomain racnode-scan
	192.168.24.42 racnode-scan.localdomain racnode-scan
	192.168.24.43 racnode-scan.localdomain racnode-scan

Create wallet on SERVER:

[oracle@RACnode1 ~]$ mkdir -p /u01/app/oracle/wallet/tls

[oracle@RACnode1 ~]$  orapki wallet create -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123 -auto_login
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Operation is successfully completed.
[oracle@RACnode1 ~]$

[oracle@RACnode1 ~]$ orapki wallet add -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123 -dn "CN=racnode-scan.localdomain" -keysize 1024 -self_signed -validity 3650
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
[oracle@RACnode1 ~]$


[oracle@RACnode1 ~]$ orapki wallet display -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Subject:        CN=racnode-scan.localdomain
Trusted Certificates:
Subject:        CN=racnode-scan.localdomain
[oracle@RACnode1 ~]$


EXPORT CERTIFICATE:
[oracle@RACnode1 ~]$ orapki wallet export -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123  -dn "CN=racnode-scan.localdomain" -cert /tmp/scan-certificate.crt
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Operation is successfully completed.
[oracle@RACnode1 ~]$

[oracle@RACnode1 ~]$ cat /tmp/scan-certificate.crt
-----BEGIN CERTIFICATE-----
MIIBxDCCAS0CEAibEOaPe/9RHF3PZMfAQmcwDQYJKoZIhvcNAQELBQAwIzEhMB8G
A1UEAxMYcmFjbm9kZS1zY2FuLmxvY2FsZG9tYWluMB4XDTI1MTIxNDIwNDgzMloX
DTM1MTIxMjIwNDgzMlowIzEhMB8GA1UEAxMYcmFjbm9kZS1zY2FuLmxvY2FsZG9t
YWluMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCwjhMaJ+5IgbtDVvf+Ftzy
ATKTspScTNQ7NtRweI126TUiGh+bXn+F5ZbhYEaqjwh3cvvyQ2FlRm4W3g8FFcq5
ih1UXYZlYDfUM2GjuJf84uebrzCMuOsg0hpk9tmwblsiqobQNBLrWIOV+fZMtyih
WXADOK3oMSjB7RhcD+Yb2wIDAQABMA0GCSqGSIb3DQEBCwUAA4GBAIYIBd8tahtc
8YLWrPXUhkNCMhk1NMvzeu6pewpIyG3W5P3z5evoX9eW9TpjhwjE7DyB58CTQMPp
YUAxj6+SeSnheCTLtumtPt2M5gpWuJvkBrTFiFv7716o2xwmWwzZE0CbQi/Idr9I
4d+deJyxL+wteGKRrFrVeReYv6Pri8ph
-----END CERTIFICATE-----
[oracle@RACnode1 ~]$

Create wallet on CLIENT:

[oracle@dune ~]$ mkdir -p /u01/app/clientwallet/tls
[oracle@dune ~]$ orapki wallet create -wallet "/u01/app/clientwallet/tls" -pwd WalletPasswd123 -auto_login
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.

Operation is successfully completed.
[oracle@dune ~]$


[oracle@dune ~]$ orapki wallet add -wallet "/u01/app/clientwallet/tls" -pwd WalletPasswd123 -dn "CN=dune" -keysize 1024 -self_signed -validity 3650
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.

Operation is successfully completed.
[oracle@dune ~]$


[oracle@dune ~]$ orapki wallet display -wallet "/u01/app/clientwallet/tls" -pwd WalletPasswd123
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Subject:        CN=dune
Trusted Certificates:
Subject:        CN=dune
[oracle@dune ~]$

EXPORT CERTIFICATE:
[oracle@dune ~]$ orapki wallet export -wallet "/u01/app/clientwallet/tls" -pwd WalletPasswd123 -dn "CN=dune" -cert /tmp/client-certificate.crt
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
[oracle@dune ~]$


[oracle@dune ~]$ cat /tmp/client-certificate.crt
-----BEGIN CERTIFICATE-----
MIIBnTCCAQYCEQD/YngtaUDK0VSmFVycNy2bMA0GCSqGSIb3DQEBCwUAMA8xDTAL
BgNVBAMTBGR1bmUwHhcNMjUxMjE0MjEwNTA5WhcNMzUxMjEyMjEwNTA5WjAPMQ0w
CwYDVQQDEwRkdW5lMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCkEcVGcC3o
kAfnlyAwtUoU5TNR2Pq8h87SR6ckHkgj+cxmp8lGSBhHNtvP9Uhv7Q5su0Kqh1Dl
F2SMhc2FrIhh8/AGBvhhScv21a7tcSpFo2U6+EOcFR9sd1caERMQlxTDBfKBlevW
3tung82GO/XCbysCEBZkLGVXX5U8BGY98QIDAQABMA0GCSqGSIb3DQEBCwUAA4GB
AI3IJqiMzirQzxw43hfxamUqYPRWgt/VX7mN7vD3IAm005IIhD196997YDc4sclc
9COsupdk0bfmQ69xPzu56HlayiNNY9/ZjplRFDmuasy12y3/AWI3VnNsMvWykuG6
GxtPWll/0EmBtrSuW5cmoG3lOlt7kTaiVTQV0qFL/zC2
-----END CERTIFICATE-----
[oracle@dune ~]$

Now we need to share the certificates.

LOAD CLIENT CERTIFICATE ON SERVER WALLET:

[oracle@RACnode1 ~]$ scp -p dune:/tmp/client-certificate.crt /tmp
[oracle@RACnode1 ~]$ ls -tlr /tmp/client-certificate.crt
-rw-------. 1 oracle oinstall 618 Dec 14 21:06 /tmp/client-certificate.crt
[oracle@RACnode1 ~]$

[oracle@RACnode1 ~]$ orapki wallet add -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123 -trusted_cert -cert /tmp/client-certificate.crt
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Operation is successfully completed.
[oracle@RACnode1 ~]$


[oracle@RACnode1 ~]$ orapki wallet display -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Subject:        CN=racnode-scan.localdomain
Trusted Certificates:
Subject:        CN=racnode-scan.localdomain
Subject:        CN=dune
[oracle@RACnode1 ~]$

Copy wallet to second RAC node:

[oracle@RACnode2 ~]$ mkdir -p /u01/app/oracle/wallet/tls
[oracle@RACnode2 ~]$ scp -pr RACnode1:/u01/app/oracle/wallet/tls /u01/app/oracle/wallet/tls
ewallet.p12.lck                                                                                          100%    0     0.0KB/s   00:00
ewallet.p12                                                                                              100% 2992     1.6MB/s   00:00
cwallet.sso.lck                                                                                          100%    0     0.0KB/s   00:00
cwallet.sso                                                                                              100% 3037     1.9MB/s   00:00
[oracle@RACnode2 ~]$

LOAD SERVER CERTIFICATE ON CLIENT WALLET:

[oracle@dune ~]$ orapki wallet display -wallet "/u01/app/oracle/wallet/tls" -pwd WalletPasswd123 ^C
[oracle@dune ~]$ ls -tlr /tmp/scan-certificate.crt
-rw-------. 1 oracle oinstall 671 Dec 14 20:50 /tmp/scan-certificate.crt
[oracle@dune ~]$

[oracle@dune ~]$ orapki wallet add -wallet "/u01/app/clientwallet/tls" -pwd WalletPasswd123 -trusted_cert -cert /tmp/scan-certificate.crt
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.
Operation is successfully completed.
[oracle@dune ~]$

[oracle@dune ~]$ orapki wallet display -wallet "/u01/app/clientwallet/tls" -pwd WalletPasswd123
Oracle PKI Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2024, Oracle and/or its affiliates. All rights reserved.

Requested Certificates:
User Certificates:
Subject:        CN=dune
Trusted Certificates:
Subject:        CN=racnode-scan.localdomain
Subject:        CN=dune
[oracle@dune ~]$

Update SQLNET.ORA on SERVER side (on both RAC servers)

WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /u01/app/oracle/wallet/tls)
     )
   )

SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)

Update LISTENER.ORA (on both RAC servers)

SSL_CLIENT_AUTHENTICATION = FALSE

WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /u01/app/oracle/wallet/tls)
    )
  )

Update endpoints on both local and scan:

[oracle@RACnode1 ~]$ srvctl stop listener
[oracle@RACnode1 ~]$ srvctl modify listener -p TCP:1521/TCPS:2484
[oracle@RACnode1 ~]$ srvctl start listener
[oracle@RACnode1 ~]$ srvctl config listener
Name: LISTENER
Type: Database Listener
Network: 1, Owner: oracle
Home: <CRS home>
End points: TCP:1521/TCPS:2484
Listener is enabled.
Listener is individually enabled on nodes:
Listener is individually disabled on nodes:
[oracle@RACnode1 ~]$


[oracle@RACnode1 ~]$ srvctl stop scan_listener
[oracle@RACnode1 ~]$ srvctl stop scan
[oracle@RACnode1 ~]$ srvctl modify scan_listener -p TCP:1521/TCPS:2484
[oracle@RACnode1 ~]$ srvctl start scan
[oracle@RACnode1 ~]$ srvctl start scan_listener
[oracle@RACnode1 ~]$ srvctl config scan_listener
SCAN Listeners for network 1:
Registration invited nodes:
Registration invited subnets:
Endpoints: TCP:1521/TCPS:2484
SCAN Listener LISTENER_SCAN1 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN2 exists
SCAN Listener is enabled.
SCAN Listener LISTENER_SCAN3 exists
SCAN Listener is enabled.
[oracle@RACnode1 ~]$

Validate listeners are listening on new port:

[oracle@RACnode1 ~]$  lsnrctl status  | grep -i host
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.24.31)(PORT=2484)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.24.1)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.24.31)(PORT=1521)))
[oracle@RACnode1 ~]$

[oracle@RACnode1 ~]$ lsnrctl status LISTENER_SCAN1  | grep -i host
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.24.41)(PORT=2484)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.24.41)(PORT=1521)))
[oracle@RACnode1 ~]$



[oracle@RACnode2 ~]$ lsnrctl status  | grep -i host
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.24.32)(PORT=2484)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.24.2)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.24.32)(PORT=1521)))
[oracle@RACnode2 ~]$

[oracle@RACnode2 ~]$ lsnrctl status LISTENER_SCAN2  | grep -i host
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=192.168.24.42)(PORT=2484)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.24.42)(PORT=1521)))
[oracle@RACnode2 ~]$

Add tns entries on client side:

test19c_ssl_node1=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCPS)
      (HOST=RACnode1)
      (PORT=2484)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=test19c_pdb1)
    )
  )

test19c_ssl_node2=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCPS)
      (HOST=RACnode2)
      (PORT=2484)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=test19c_pdb1)
    )
  )

test19c_ssl_scan=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCPS)
      (HOST=racnode-scan)
      (PORT=2484)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=test19c_pdb1)
    )
  )

Update REMOTE_LISTENER to allow registration on 2484:

SQL> show parameter remote_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_listener                      string      RACnode-scan:1521

SQL> alter system set remote_listener = "RACnode-scan:1521","RACnode-scan:2484";
SQL> ALTER SYSTEM REGISTER;

SQL> show parameter remote_listener
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_listener                      string      RACnode-scan:1521, RACnode-scan:2484

Check services are actually registered and READY on SCAN’s: (and not BLOCKED)

[oracle@RACnode1 ~]$ lsnrctl services LISTENER_SCAN1
....
Service "test19c_pdb1" has 2 instance(s).
  Instance "test19c1", status READY, has 2 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.24.31)(PORT=1521))
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.24.31)(PORT=2484))
  Instance "test19c2", status READY, has 2 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.24.32)(PORT=1521))
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.24.32)(PORT=2484))

*As an example of issues on the scan:

[oracle@RACnode1 ~]$ lsnrctl services LISTENER_SCAN1
.....
Service "test19c_pdb1" has 2 instance(s).
  Instance "test19c1", status READY, has 2 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.24.31)(PORT=1521))
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.24.31)(PORT=2484))
  Instance "test19c2", status READY, has 2 handler(s) for this service...
    Handler(s):
      "DEDICATED" established:0 refused:0 state:ready
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.24.32)(PORT=1521))
      "DEDICATED" established:0 refused:0 state:blocked
         REMOTE SERVER
         (ADDRESS=(PROTOCOL=TCPS)(HOST=192.168.24.32)(PORT=2484))    <<---- instance 2 in BLOCKED!
The command completed successfully
[oracle@RACnode1 ~]$

** this was because not all wallet files were copied to the second node.

Now try to connect:

[oracle@dune ~]$ sqlplus TEST_TLS/TEST_TLS@test19c_ssl_scan

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Dec 15 08:03:38 2025
Version 19.26.0.0.0

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

Last Successful login time: Mon Dec 15 2025 08:03:12 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL>



SQL> SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') as network_protocol FROM dual;

NETWORK_PROTOCOL
--------------------------------------------------------------------------------
tcps

Now lets see how wireshark sees the packages:

[root@RACnode1 ~]# yum install -y wireshark


[root@RACnode1 ~]#  tshark -i any -d "tcp.port==2484,ssl" -V -a duration:5 2> /dev/null | egrep "Cipher Suites \(|Cipher Suite:|^            Version: |SSL Record Layer: Handshake Protocol: Client Hello|Handshake Protocol: Server Hello|Record Layer"| uniq | sed -e "s/(0x.*)//g" -e "s/.*SSL Record Layer: Handshake Protocol: Client Hello/Client requested:/g" -e "s/.*Version:/   Protocol Version:/g" -e "s/.*Cipher Suites /   Cipher Suites Requested:/g" -e "s/.*Handshake Protocol: Server Hello/Server replied with:/g" |egrep -v "Server replied with: Done" &

Connect from client using 2484:

[oracle@dune ~]$ sqlplus TEST_TLS/TEST_TLS@test19c_ssl_node1

SQL*Plus: Release 19.0.0.0.0 - Production on Mon Dec 15 10:10:31 2025
Version 19.26.0.0.0

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

Last Successful login time: Mon Dec 15 2025 10:04:06 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> 

Now on the server side, terminal will show t this:

[root@RACnode1 ~]# Client requested:
   Protocol Version: TLS 1.2
   Cipher Suites Requested:(3 suites)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
                Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV
Server replied with:
Server replied with:
   Protocol Version: TLS 1.2
            Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
    TLSv1.2 Record Layer: Handshake Protocol: Certificate
    TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    TLSv1.2 Record Layer: Application Data Protocol: Application Data
    TLSv1.2 Record Layer: Handshake Protocol: Client Hello
   Protocol Version: TLS 1.2
   Cipher Suites Requested:(3 suites)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
                Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV
Server replied with:
Server replied with:
   Protocol Version: TLS 1.2
            Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
    TLSv1.2 Record Layer: Handshake Protocol: Certificate
    TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    TLSv1.2 Record Layer: Application Data Protocol: Application Data

[root@RACnode1 ~]# Client requested:
   Protocol Version: TLS 1.2
   Cipher Suites Requested:(3 suites)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
                Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV
Server replied with:
Server replied with:
   Protocol Version: TLS 1.2
            Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
    TLSv1.2 Record Layer: Handshake Protocol: Certificate
    TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
    TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
    TLSv1.2 Record Layer: Application Data Protocol: Application Data
    TLSv1.2 Record Layer: Handshake Protocol: Client Hello
   Protocol Version: TLS 1.2
   Cipher Suites Requested:(3 suites)
                Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
                Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
                Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV
    TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)


Now, lets change SSL_CIPHER_SUITES on SERVER side to NOT match what the client is requesting:

[oracle@RACnode1 admin]$ grep SSL_CIPHER_SUITES sqlnet.ora
#SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)
SSL_CIPHER_SUITES = (TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
[oracle@RACnode1 admin]$

Try to connect and see capture:

[oracle@dune ~]$ sqlplus TEST_TLS/TEST_TLS@test19c_ssl_node1
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Dec 15 10:22:42 2025
Version 19.26.0.0.0
Copyright (c) 1982, 2024, Oracle.  All rights reserved.
ERROR:
ORA-28860: Fatal SSL error

Enter user-name:

We can see the failure on the capture now:


[root@RACnode1 ~]# Client requested:
Protocol Version: TLS 1.2
Cipher Suites Requested:(3 suites)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV
Server replied with:
Server replied with:
Protocol Version: TLS 1.2
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
TLSv1.2 Record Layer: Handshake Protocol: Certificate
TLSv1.2 Record Layer: Handshake Protocol: Client Key Exchange
TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
TLSv1.2 Record Layer: Handshake Protocol: Encrypted Handshake Message
TLSv1.2 Record Layer: Application Data Protocol: Application Data
TLSv1.2 Record Layer: Handshake Protocol: Client Hello
Protocol Version: TLS 1.2
Cipher Suites Requested:(3 suites)
Cipher Suite: TLS_RSA_WITH_AES_256_CBC_SHA
Cipher Suite: TLS_RSA_WITH_3DES_EDE_CBC_SHA
Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV
TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)

That’s it! test done

This is a combination of this post, and this one.

Last modified: 17 December 2025

Author

Comments

Write a Reply or Comment

Your email address will not be published.