สิ่งที่ต้องเตรียม
- Oracle Database Server ในตัวอย่างนี้ใช้ Oracle database บน Oracle Enterprise Linux 7
- Oracle Database Client ในตัวอย่างใช้ Windows Server 2008 R2
เริ่ม
- ฝั่ง Server
- เข้าระบบด้วยบัญชีผู้ใช้ oracle หรือบัญชีที่เป็นเจ้าของ Oracle Database
- เปิด terminal สร้าง Oracle Wallet ด้วยคำสั่ง
-
mkdir -p /u01/app/oracle/wallet
-
- ต่อด้วย
-
orapki wallet create -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 -auto_login_local
- โดย -pwd WalletPasswd123 ตัว WalletPasswd123 คือรหัสผ่านที่ใช้ป้องกันการเข้าถึงข้อมูลต่างๆ ใน wallet กฎการตั้งมีอยู่คือ ยาวอย่างน้อย 8 ตัวอักษร ไม่จำกัดความยาว จำเป็นต้องตั้งให้ตัวเลขผสมตัวอักษร
-
- สร้าง Certificate และใส่เข้าไปใน wallet ด้วยคำสั่ง
-
orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \
-dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650
-
- ตรวจสอบด้วยคำสั่ง
-
orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123
-
- ได้ผลลัพธ์ประมาณ
-
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=reis.psu.ac.th
Trusted Certificates:
Subject: CN=reis.psu.ac.th
-
- Export Certificate เพื่อนำไปใช้กับเครื่อง Oracle Client ด้วยคำสั่ง
-
orapki wallet export -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \
-dn "CN=`hostname`" -cert /tmp/server-certificate.crt
-
- ตรวจสอบแฟ้มที่ export ไปด้วยคำสั่ง
-
cat /tmp/server-certificate.crt
-
- ได้ผลลัพธ์ประมาณว่า
-
-----BEGIN CERTIFICATE-----
MIIBoTCCAQoCAQAwDQYJKoZIhvcNAQEEBQAwGTEXMBUGA1UEAxMOcmVpcy5wc3UuYWMudGgwHhcN
MTgwMTA5MDcyNTA2WhcNMjgwMTA3MDcyNTA2WjAZMRcwFQYDVQQDEw5yZWlzLnBzdS5hYy50aDCB
nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAj4x2/NviDaTlXuEJt0kZARY5fHiT2SiVX+a18hai
I0stoUhKKefjOCgB85iuqjIk0rvcGXI0KXkbenTy2t40A+qGxB04mBhCLKaKeIe67BZKR6Zyw1dd
oaesoaWChC01b+IW1X5WWtC53UxpIZQ4Zktj41sLGUnarIr9+9HFwncCAwEAATANBgkqhkiG9w0B
AQQFAAOBgQAqSCF2Y8uyM4rSQHUC8MKEl3Ia3NJKnigMOUzDc2fP7grSaoeuQ4NvIntTD+s+IT5Y
EpLVND4kSHFTwGRq0Py/ig8ybXZCXfHtvNZh7ZGziL/sYt5/8xYi/tOBKwVanBTUaseKIMovtmd7
UyoOKrX8YBoFsB3UPRLudmFsksXRXw==
-----END CERTIFICATE-----
-
- ฝั่ง Client
- เข้าระบบด้วยบัญชีผู้ใช้ administrator
- เปิด cmd แล้วสร้าง wallet ด้วยคำสั่ง
-
mkdir c:\app\oracle\wallet
-
สร้าง Certificate ด้วยคำสั่ง
-
-
orapki wallet add -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -keysize 1024 -self_signed -validity 3650
- โดย WalletPasswd123 คือพาสเวิร์ดที่ใช้ล็อค wallet ไม่จำเป็นต้องเหมือนกับของ Server
-
- ตรวจสอบด้วยคำสั่ง
-
orapki wallet display -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123
-
- ได้ผลลัพธ์ประมาณว่า
-
Oracle PKI Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.Requested Certificates:
User Certificates:
Subject: CN=ENERAZAN
Trusted Certificates:
Subject: CN=ENERAZAN
-
- Export Certificate เพื่อนำไปใช้กับเครื่อง Oracle Database Server ด้วยคำสั่ง
-
orapki wallet export -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -dn "CN=%computername%" -cert c:\client-certificate.crt
-
- ตรวจสอบแฟ้มที่ export ไปด้วยคำสั่ง
- more c:\client-certificate.crt
- ได้ผลลัพธ์ประมาณว่า
-
-----BEGIN CERTIFICATE-----MIIBmTCCAQICAQAwDQYJKoZIhvcNAQEEBQAwEzERMA8GA1UEAxMIRU5FUkFaQU4wIhgPMDE1NTAxMDkwNzMzNDlaGA8wMTQ1MDEwNzA3MzM0OVowEzERMA8GA1UEAxMIRU5FUkFaQU4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJHEEnB4kiI82QVyt0/GlrILF9dwd/jVRlgCQkLmLrpF6RKrIUntzvygyVhtTybeaShH751gYvtl1NFxDUWkBnfS5u2DN6ATP2WpNQgGM/skPWZOxoewy6OeeFsDPNUJTsI8+F5DIwtNhZcdQtBexZ/D3ALkSboR87t2Vy8OJpD7AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAV7xLLslRn2srS4A4Ks1KiuUWI/ackyNK7UiWgWD/by5Vx4Zw+0x3hdLzQllDR2O5Nef9it5WyYWrDQ47RadqMEVVfTGuAqQn47n/t+v24ljwm2yZ36Tj2lDVaFbE/ZtRyzPKgIwUy6RIt9XVX39vXFJVaENCHzZ0R3hs2bx1K3o=-----END CERTIFICATE-----
-
- ทำการส่งไฟล์ certificate แลกกันระหว่าง Server กับ Client โดยใช้วิธีการที่ชื่นชอบของแต่คน เมื่อแลกไฟล์กันเสร็จแล้ว
- ฝั่ง Server import certificate ด้วยคำสั่ง
-
orapki wallet add -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123 \ -trusted_cert -cert /tmp/client-certificate.crt
-
- สามารถตรวจสอบด้วยคำสั่ง
-
orapki wallet display -wallet "/u01/app/oracle/wallet" -pwd WalletPasswd123
-
- ได้ผลลัพธ์ประมาณ
-
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.Requested Certificates:
User Certificates:
Subject: CN=reis.psu.ac.th
Trusted Certificates:
Subject: CN=ENERAZAN
Subject: CN=reis.psu.ac.th
-
- ฝั่ง Client import certificatae ด้วยคำสั่ง
-
orapki wallet add -wallet "c:\app\oracle\wallet" -pwd WalletPasswd123 -trusted_cert -cert c:\server-certificate.crt
-
- สามารถตรวจสอบด้วยคำสั่ง
- orapki wallet display -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123
- ได้ผลลัพธ์ประมาณว่า
-
Oracle PKI Tool : Version 12.2.0.1.0
Copyright (c) 2004, 2016, Oracle and/or its affiliates. All rights reserved.Requested Certificates:
User Certificates:
Subject: CN=ENERAZAN
Trusted Certificates:
Subject: CN=reis.psu.ac.th
Subject: CN=ENERAZAN
-
- ฝั่ง Server แก้ไขแฟ้ม $ORACLE_HOME/network/admin/sqlnet.ora ด้วย editor ที่ชื่นชอบ
- เพิ่มคำสั่งต่อไปนี้
-
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)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)
แก้ไขแฟ้ม $ORACLE_HOME/network/admin/listener.ora
-
- เพิ่มข้อความส่วนที่เป็นตัวหนาตามตำแหน่งต่อไปนี้
-
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = reis.psu.ac.th)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = reis.psu.ac.th)(PORT = 2484))
)
)SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)
- restart listener ด้วยคำสั่ง
- lsnrctl stop
- lsnrctl start
- ฝั่ง Client แก้ไขแฟ้ม C:\app\client\Administrator\product\12.2.0\client_1\network\admin\sqlnet.ora โดยเพิ่มข้อความต่อไปนี้
-
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = c:\app\oracle\wallet)
)
)SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS)
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)
-
- แก้ไขแฟ้ม C:\app\client\Administrator\product\12.2.0\client_1\network\admin\tnsnames.ora เพิ่มข้อความต่อไปนี้
-
REIS_SSL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCPS)(HOST = reis.psu.ac.th)(PORT = 2484))
)
(CONNECT_DATA =
(SERVICE_NAME = reis.psu.ac.th)
)
)
-
- ทดสอบใช้งาน
- ที่ Client พิมพ์คำสั่ง
- sqlplus scott/tiger@reis_ssl
- ได้ผลลัพธ์ประมาณว่า
-
SQL*Plus: Release 12.2.0.1.0 Production on Wed Feb 7 16:54:05 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.Last Successful login time: Wed Feb 07 2018 16:52:50 +07:00
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 – 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ionsSQL>
-
- หรือต่อด้วย SQL Developer ต้องตั้งค่าการเชื่อมต่อเป็นดังภาพ
- จากภาพเลือก Connection Type เป็น Advanced และใช้ช่อง Custom JDBC URL ใส่เป็น jdbc:oracle:oci:/@reis_ssl
- เนื่องจากไม่สามารถเชื่อมต่อผ่าน tns ได้ ดังภาพ
- วิธีเซ็ตค่าแบบนี้ใช้ได้กับ Oracle Database 10G R2 เป็นต้นมา
- จบขอให้สนุก
ที่มา:
https://oracle-base.com/articles/misc/configure-tcpip-with-ssl-and-tls-for-database-connections