如何使用ssl加密cx_oracle连接?



我使用python 3.7版本的cx_oracle模块,我需要检查连接是否加密。如果没有,我需要将ssl设置为true以使其加密。

下面是我用来连接的一段代码:

import cx_Oracle
dsn = cx_Oracle.makedsn(host='127.0.0.1', port=1521, sid='your_sid')
conn = cx_Oracle.connect(user='your_username', password='your_password', dsn=dsn)
conn.close()

在考虑为连接启用安全性时,第一步应该是在考虑使用ssl之前使用wallet,并避免使用密码。如果您的密码在Python程序中可见,那么您的网络流量加密程度如何并不重要。我知道这不是问题本身的一部分,但这是一个非常好的做法,可用于cx_Oracle

一个例子(我的Python程序运行在Linux客户端机器连接到Linux Oracle数据库使用ssl)

客户端

1。创建钱包

mkstore -wrl "/home/myuser/wallet_directory" -create

2。创建凭据

mkstore -wrl "/home/myuser/wallet_directory" -createCredential mynetalias myuser myuserpw

其中mynetalias是我的tns字符串连接的别名,我将存储在tnsnames.ora文件上。在我的示例中,我将使用创建钱包的同一目录。

3。创建tnsnames.ora并添加与钱包

相同的别名
mynetalias =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbhost.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb1)
)
)

4。创建sqlnet.ora文件

WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /home/myuser/wallet_dir)
)
)
SQLNET.WALLET_OVERRIDE = TRUE

5。将TNS_ADMIN环境变量添加到bash配置文件中。

cd
echo "export TNS_ADMIN=/home/myuser/wallet_directory" >> .bashrc

如果您确实知道数据库服务器执行完整性和加密,那么您不需要在客户端配置任何内容。但是,您也可以(或者可以选择)根据您的业务需要这样做。将以下行添加到钱包所在的sqlnet.ora文件

SQLNET.CRYPTO_CHECKSUM_CLIENT = required
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA512)
SQLNET.ENCRYPTION_CLIENT = required
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256)

数据库端

为了设置SSLencryption,我们需要将这些值添加到数据库sqlnet.ora文件。回顾您的需求并讨论正确的安全算法。在我的例子中,我的数据库接受任何一种连接方式(带或不带加密)。

SQLNET.CRYPTO_CHECKSUM_SERVER = accepted
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA512)
SQLNET.ENCRYPTION_SERVER = accepted
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)

您可能需要在这里查看这些参数:

SQLNET参数如何连接

正常

connection = cx_Oracle.connect(dsn="mynetalias")

pool = cx_Oracle.SessionPool(externalauth=True, homogeneous=False,
dsn="mynetalias")
pool.acquire()

请记住,dsn必须与之前配置的tnsnames.ora中使用的别名完全匹配。

使用V$SESSION_CONNECT_INFO视图提供的信息来确保您的连接是加密的(字段network_service_banner)

我们可以使用python-oracledb驱动程序,这是cx_Oracle 8.3的主要后续版本。https://python-oracledb.readthedocs.io/en/latest/user_guide/introduction.html

对代码的引用:https://github.com/oracle/python-oracledb/discussions/34

最新更新