SSL аутентификация в Oracle
Пытаюсь настроить SSL взаимную аутентификацию Oracle. База данных на windows server 2008R2, на ней же Active Directory, адрес 192.168.56.12. Клиент Windows 7, адрес 192.168.56.11. listener.ora сервера:
TRACE_LEVEL_LISTENER = ADMIN
TRACE_FILE_LISTENER = listener
TRACE_DIRECTORY_LISTENER = C:/app/Kefir/product/12.2.0/dbhome_1/network/trace
LOG_FILE_LISTENER = listener
LOG_DIRECTORY_LISTENER = C:/app/Kefir/product/12.2.0/dbhome_1/network/log
LOGGING_LISTENER = ON
SID_LIST_SSL_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(SID_NAME = ORCL)
(ORACLE_HOME = C:/app/Kefir/product/12.2.0/dbhome_1)
)
)
#SSL_CLIENT_AUTHENTICATION = FALSE
SSL_LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 192.168.56.12)(PORT = 2484))
)
WALLET_LOCATION = (SOURCE=
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY=C:/wallet_server
)))
sqlnet.ora сервера:
SQLNET.AUTHENTICATION_SERVICES= (TCPS, BEQ, NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SSL_CLIENT_AUTHENTICATION = TRUE
SSL_CIPHER_SUITES= (SSL_RSA_EXPORT_WITH_RC4_40_MD5)
SSL_VERSION = 0
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = C:/wallet_server)
)
)
TRACE_DIRECTORY_SERVER = C:/app/Kefir/product/12.2.0/dbhome_1/network/trace
trace_level_server = SUPPORT
TRACE_FILE_server = trace_server
sqlnet.ora клиента:
WALLET_LOCATION = (SOURCE=
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY=C:/client_wallet
)))
SSL_VERSION = 0
SQLNET.AUTHENTICATION_SERVICES = (TCPS,BEQ,NTS)
SSL_SERVER_DN_MATCH = TRUE
SSL_CIPHER_SUITES= (SSL_RSA_EXPORT_WITH_RC4_40_MD5)
SSL_CLIENT_AUTHENTICATION = TRUE
NAMES.DIRECTORY_PATH= (TNSNAMES,EZCONNECT)
TRACE_DIRECTORY_CLIENT = C:/client_wallet
trace_level_client = USER
TRACE_FILE_CLIENT = trace_user
tnsnames.ora клиента
orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 192.168.56.12)(PORT = 2484))
(CONNECT_DATA=
(SERVER = DEDICATED)
(SERVICE_NAME=ORCL)
)
(SECURITY=(SSL_SERVER_CERT_DN="CN=WIN-SFJD57T6M7B.myora.local"))#доменное имя сервера
Порт 5500, хотя в listener.ora указан 2484. Перезапускаю listener и теперь порт 1521. Как мне тогда это изменить?
Что делать?
Ответы (1 шт):
Проверил туториал, исползуемый ТС. При проверке обращался к следующим главам документации:
Configuring Secure Sockets Layer Authentication, Database Net Services Reference.
В результате - провереная на работоспосоность конфигурация.
Пошаговая инструкция
Имеется:
db.local.net- сервер БДapp.local.net- машина с клиентом Instant Client- используются параметры по умолчанию, поэтому все файлы конфигурации почти пустые,
клиент в соотоянии без проблем подключится к БД по easy connect
На сервере БД необходимо создать кошельки для сертификатов (также для клиента, т.к на нём отсутствуют необходимые утилиты), и добавить в них самоподписанные сертификаты:
$ cd $ORACLE_BASE $ orapki wallet create -wallet wallet/ -pwd Wallet0Pass -auto_login $ orapki wallet add -wallet wallet/ -pwd Wallet0Pass \ -dn CN=db.local.net \ -keysize 2048 -self_signed -validity 365 # ok $ orapki wallet create -wallet wallet.app/ -pwd Wallet0Pass -auto_login $ orapki wallet add -wallet wallet.app/ -pwd Wallet0Pass \ -dn CN=app.local.net \ -keysize 2048 -self_signed -validity 365Добавленные сертификаты надо экспортировать и добавить в другой кошелёк, как доверенный сертификат:
$ orapki wallet export -wallet wallet/ -dn CN=db.local.net -cert db.crt -pwd Wallet0Pass $ orapki wallet export -wallet wallet.app/ -dn CN=app.local.net -cert app.crt -pwd Wallet0Pass $ orapki wallet add -wallet wallet -trusted_cert -cert app.crt -pwd Wallet0Pass $ orapki wallet add -wallet wallet.app -trusted_cert -cert db.crt -pwd Wallet0PassНа сервере БД надо добавить следующее в конфигурационные файлы:
sqlnet.ora:
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT) WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /app/oracle/wallet)) ) SQLNET.AUTHENTICATION_SERVICES = ALL SSL_CLIENT_AUTHENTICATION = TRUE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)listener.ora:
WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /app/oracle/wallet)) ) SSL_CLIENT_AUTHENTICATION = TRUE LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP) (HOST = db.local.net)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCPS)(HOST = db.local.net)(PORT = 1544))) )Небходимо перестартовать прослушиватель:
$ lsnrctl stop $ lsnrctl start $ lsnrctl status [...] Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=db.local.net)(PORT=1521))) STATUS of the LISTENER ------------------------ Alias LISTENER [...] Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=db.local.net)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=db.local.net)(PORT=1544))) The listener supports no services The command completed successfullyДоступные сервисы БД, кторые не прописаны в параметре
SID_LIST_LISTENER, будут зарегистрированны автоматически в течении минуты.На машину с клиентом необходимо скопировать любым доступным способом (использовал утилиту
scp) кошелёк с сервера БД. Затем дополнить конфигурационные файлы:$ scp -r root@dbsrv:/app/oracle/wallet.app/ ./walletsqlnet.ora:
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT) WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = d:\app\oracle\wallet)) ) SQLNET.AUTHENTICATION_SERVICES = ALL SSL_CLIENT_AUTHENTICATION = TRUE SSL_SERVER_DN_MATCH = TRUE SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)tnsnames.ora:
pdb1s = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCPS)(HOST = dbsrv.local.net)(PORT = 1544)) (CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = pdb1)) (SECURITY = (SSL_SERVER_CERT_DN = "CN=db.local.net")) )Как результат, протокол устанавливаемого соединения -
TCPS:$ sqlplus -l me/me@pdb1s SQL> select sys_context ('userenv','network_protocol') proto from dual; PROTO -------------------------------------------------------------------------------- tcps

