تنظیم TCP/IP با SSL و TLS برای اتصال به پایگاه داده اوراکل
۱.مقدمه
در این مستند به پیکربندی موردنیاز برای سرور و کلاینت ها بابت استفاده از پروتکل Tcp به همراه SSL و TLS در اتصال به پایگاه داده می پردازیم. رمزنگاری شبکهای در زمانهایی که شما قصد دارید پایگاهداده خود را به Cloud منتقل کنید و یا فاقد فایروال شبکهای هستید از اهمیت زیادی برخوردار می شود.
تنظیم TCP/IP با SSL و TLS برای اتصال به پایگاه داده اوراکل
۲٫پیشنیازها و فرضیات
در این مستند فرض می شود پیشنیازهای ذیل وجود دارد:
-یک سرور پایگاه داده، در این مورد ما از پایگاه داده اوراکل ۱۲C که برروی Oracle Linux 7 درحال اجراست استفاده می کنیم. در سایر نسخه ها پایگاه داده و سرور یکسان است.
-یک کلاینت که Oracle Client برروی آن نصب شده باشد. که در این مستند ما از Oracle Client 11 برروی Windows 7 استفاده می کنیم.
-در این سناریو، ما دارای فایروال های شبکه ای و یا محلی که پورت ۲۴۸۴ را مسدود کند، نیستیم.
۳٫سرور Wallet و Certificate
یک Wallet اتولاگین جدید ایجاد می کنیم.
$ mkdir -p /u01/app/oracle/wallet
$ orapki wallet create -wallet “/u01/app/oracle/wallet” -pwd WalletPasswd123 -auto_login_local
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
$
یک گواهی نامه خود امضا ایجاد می کنیم و درون Wallet بارگزاری می کنیم.
$ orapki wallet add -wallet “/u01/app/oracle/wallet” -pwd WalletPasswd123 \
-dn “CN=`hostname`” -keysize 1024 -self_signed -validity 3650
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
$
سپس محتویات پول را بررسی می کنیم. توجه داشته باشید که گواهی نامه خود امضا یک گواهی نامه کاربر و معتبر است.
$ 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=ol7-121.localdomain
Trusted Certificates:
Subject: CN=ol7-121.localdomain
$
گواهی نامه را از سرور خارج می کنیم، که بعدا بتوانیم آن را در Wallet کلاینت بارگزاری کنیم.
$ orapki wallet export -wallet “/u01/app/oracle/wallet” -pwd WalletPasswd123 \
-dn “CN=`hostname`” -cert /tmp/`hostname`-certificate.crt
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
$
گواهی نامه ای که از سرور خارج کرده ایم را بررسی می کنیم که همانطور که انتظار می رود باشد.
$ cat /tmp/`hostname`-certificate.crt
—–BEGIN CERTIFICATE—–
MIIBqzCCARQCAQAwDQYJKoZIhvcNAQEEBQAwHjEcMBoGA1UEAxMTb2w3LTEyMS5sb2NhbGRvbWFp
bjAeFw0xNTA2MjYxNDQyMDJaFw0yNTA2MjMxNDQyMDJaMB4xHDAaBgNVBAMTE29sNy0xMjEubG9j
YWxkb21haW4wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJIrU1fGWAwMxRobFsS0UZBD1jFU
wAvnH9blsynhrQrZSkwyMBWGPRFq5tufRpaifoNVVHSrjJm/nti62A6RXECAKsug9rHL8T11FOgP
۳R/+Itw2jLzwpdk7MbHMxpNHz6Y2IPCmBsJ5+625dRxugVKhLsIitAW5cUpT28bkrMl9AgMBAAEw
DQYJKoZIhvcNAQEEBQADgYEABqQaP056WcPNgzSAOhJgTU/6D8uAFGCgUN57HoraXxgAN3HgmeGq
hQfpb8tP+xeTF3ecqvWqJQHGdAJbuhRwpNR1rRovvlOxiv4gl0AplRzRuiygXfi6gst7KNmAdoxr
TOcUQsqf/Ei9TaFl/N8E+88T2fK67JHgFa4QDs/XZWM=
—–END CERTIFICATE—–
$
۴٫کلاینت Wallet و Certificate
یک Wallet اتولاگین جدید ایجاد می کنیم.
c:\>mkdir -p c:\app\oracle\wallet
c:\>orapki wallet create -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123 -auto_login_local
Oracle PKI Tool : Version 11.2.0.3.0 – Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
c:\>
یک گواهی نامه خود امضا ایجاد می کنیم و درون Wallet بارگزاری می کنیم.
c:\>orapki wallet add -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123 -dn “CN=%computername%” -keysize 1024 -self_signed -validity 3650
Oracle PKI Tool : Version 11.2.0.3.0 – Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
c:\>
محتویات Wallet را بررسی می کنیم، توجه داشته باشید که گواهی نامه خود امضا یک گواهی نامه کاربر و معتبر است.
c:\>orapki wallet display -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123
Oracle PKI Tool : Version 11.2.0.3.0 – Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=my-computer
Trusted Certificates:
Subject: OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US
Subject: CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
Subject: CN=my-computer
Subject: OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
c:\>
گواهی نامه را از سرور خارج می کنیم، که بعدا می توانیم آن را در سرور بارگزاری کنیم.
c:\>orapki wallet export -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123 -dn “CN=%computername%” -cert c:\%computername%-certificate.crt
Oracle PKI Tool : Version 11.2.0.3.0 – Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
c:\>
گواهی نامه را بررسی می کنیم.
c:\>more c:\%computername%-certificate.crt
—–BEGIN CERTIFICATE—–
MIIBmzCCAQQCAQAwDQYJKoZIhvcNAQEEBQAwFjEUMBIGA1UEAxMLSVRTLUYxTUxDNUowHhcNMTUw
NjI2MDkzMzE2WhcNMjUwNjIzMDkzMzE2WjAWMRQwEgYDVQQDEwtJVFMtRjFNTEM1SjCBnzANBgkq
hkiG9w0BAQEFAAOBjQAwgYkCgYEAk/oX7ulDhW+DKXdD+qYC9DN7DoTsmeGZaW7EwYr48sw2qQWK
HP3pFb8/eVLHuqd2tX8RCniI6Dy5iMe7aM+BOvtGDT2bkCENO7xflww+L/Jp1JeF4OCawE36/Coy
sWAu4yom7n109ioT2rQsN62ERj8wPa53r8KAB12UnidBzRECAwEAATANBgkqhkiG9w0BAQQFAAOB
gQB7hbEUXM3ur2H2osuaX24mxmw83yxLnvx9BDi10kbTdH02St/EfCNlCWc69L5iAeJVESvaVgJQ
u1AZEeD3jPYMFWTnGfX4txo7+GJWwpxCJXqYYrmYQL2h1W6UtTVsJgQ08wo2bTHTjII6HB6wt8CK
OU46CFGLL+7B7Xrpnk1UwA==
—–END CERTIFICATE—–
c:\>
۵٫تبادل گواهی نامه ها
هرسمت اتصال نیازمند تایید سمت دیگر است، بنابراین باید گواهی نامه را از سرور درون Wallet کلاینت بارگزاری کنیم و برعکس.
گواهی نامه سرور را درون Wallet کلاینت بارگزاری می کنیم.
c:\>orapki wallet add -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123 -trusted_cert -cert c:\ol7-121.localdomain-certificate.crt
Oracle PKI Tool : Version 11.2.0.3.0 – Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
c:\>
محتویات Wallet کلاینت را بررسی می کنیم، توجه کنید که گواهی نامه سرور اکنون در لیست گواهی های معتبر اضافه شده باشد.
c:\>orapki wallet display -wallet “c:\app\oracle\wallet” -pwd WalletPasswd123
Oracle PKI Tool : Version 11.2.0.3.0 – Production
Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved.
Requested Certificates:
User Certificates:
Subject: CN=my-computer
Trusted Certificates:
Subject: OU=Secure Server Certification Authority,O=RSA Data Security\, Inc.,C=US
Subject: OU=Class 2 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: CN=my-computer
Subject: OU=Class 3 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: OU=Class 1 Public Primary Certification Authority,O=VeriSign\, Inc.,C=US
Subject: CN=ol7-121.localdomain
Subject: CN=GTE CyberTrust Global Root,OU=GTE CyberTrust Solutions\, Inc.,O=GTE Corporation,C=US
c:\>
گواهی کلاینت را در Wallet سرور بارگزاری می کنیم.
$ orapki wallet add -wallet “/u01/app/oracle/wallet” -pwd WalletPasswd123 \
-trusted_cert -cert /tmp/my-computer-certificate.crt
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.
$
محتویات Wallet سرور را بررسی می کنیم، توجه کنید که گواهی نامه کلاینت اکنون در لیست گواهی های معتبر اضافه شده باشد.
$ 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=ol7-121.localdomain
Trusted Certificates:
Subject: CN=my-computer
Subject: CN=ol7-121.localdomain
$
برروی سرور، و در فایل “$ORACLE_HOME/network/admin/sqlnet.ora” محتویات زیر را اضافه می-کنیم.
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)
+لازم به ذکر است، تصمیمات شما برای استفاده از مجموعه های رمزنگاری شده نسبت به نسخه کلاینت و پایگاه داده متفاوت خواهد بود.
تنظیمات مرتبط با listener را برای تایید اتصال رمزنگاری شده SSL/TLS انجام می دهیم، برای تایید اتصال رمزنگاری شده SSL/TLS فایل “$ORACLE_HOME/network/admin/listener.ora” را تغییر می دهیم و محتویات زیر را (اطلاعات Wallet) و همچنین TCPS را به آن اضافه می کنیم.
SSL_CLIENT_AUTHENTICATION = FALSE
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /u01/app/oracle/wallet)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ol7-121.localdomain)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCPS)(HOST = ol7-121.localdomain)(PORT = 2484))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
Listener را ریستارت می کنیم.
$ lsnrctl stop
$ lsnrctl start
Listener سرور در حال حاضر تنظیم شده است.
۶٫تنظیمات شبکه کلاینت
محتویات زیر را به فایل “$ORACLE_HOME/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)
+تنظیمات مجموعه های رمزنگاری شده در کلاینت باید مطابق با تنظیمات سرور باشد.
فایل “$ORACLE_HOME/network/admin/tnsnames.ora” را تغییر می دهیم، و از تطابق تنظیمات کلاینت برای SSL با سرور و پروتکل TCPS اطمینان حاصل می کنیم.
pdb1_ssl=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCPS)
(HOST=ol7-121.localdomain)
(PORT=2484)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=pdb1)
)
)
کلاینت درحال حاضر تنظیم شده است.
۷٫تست اتصال
اکنون می توانید با ورود به TNS و فعالسازی SSL/TLS با سرور ارتباط برقرار کنید.
c:\>sqlplus test/test@pdb1_ssl
SQL*Plus: Release 11.2.0.3.0 Production on Fri Jun 26 16:23:28 2015
Copyright (c) 1982, 2011, Oracle. All rights reserved.
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 options
SQL>