当前位置: 首页 > 知识库问答 >
问题:

MacOS Python Oracle TCPS与Oracle即时客户端的连接-ORA-29024:证书验证失败

鲜于谦
2023-03-14

我正在尝试使用Python cx_Oracle包和Oracle instantclient_19_8连接到Oracle数据库。我不断收到此错误 - OORA-29024:证书验证失败。

  1. 我下载并安装了Oracle InstantClient_19_8。
  2. 在[…]instantclient_19_8/network/admin目录中,我复制了cwallet。sso和ewallet。p12我从DBA收到的文件
  3. 我创建了一个sqlnet。network/admin目录中的ora文件:

WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /instantclient_19_8/network/admin) ) ) SQLNET.WALLET_OVERRIDE = 真

ora_conn = (描述 = (ADDRESS_LIST = (地址 = (协议 = TCPS) (主机 = {主机}) (端口 = 1525) ) ) (CONNECT_DATA = (SERVICE_NAME = {SVC_NAME) ) ) )

我的Python连接信息是:

dsn=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCPS)(HOST={HOST_ADDRESS})(PORT={PORT_NBR})))(CONNECT_DATA=(SERVICE_NAME={SVC_NAME})))

cx_Oracle.init_oracle_client(lib_dir='[...]/instantclient_19_8') 

ora_conn = cx_Oracle.connect(user=usr
                              , password=pw
                              , dsn=dsn
                              , encoding="UTF-8")

cursor = ora_conn.cursor()

我看过几篇关于使用orapki的博文,但是不清楚如何将orapki与instant client配合使用。如果DBA创建了wallet,那么他们是唯一可以向wallet添加证书文件的人吗?或者,如果我让orapki工作,我能做到吗?

任何建议/指导都会很棒!

非常感谢。

共有1个答案

施超
2023-03-14

设置DIRECTORY= /instantclient_19_8/network/admin看起来很可疑。你真的在根文件系统中有一个instantclient_19_8目录吗?我希望看到像/用户/你/instantclient_19_8/网络/管理员这样的东西。

但是,由于您将文件移动到默认位置,因此您甚至不需要编辑sqlnet.ora。默认的 DIRECTORY 路径(以 开头)会自动工作。当文件位于此默认位置时,也无需设置TNS_ADMIN。

使用cx_Oracle这样的C语言代码,您不需要. p12文件。您只需要. sso文件,sqlnet.ora和tnsnames.ora.

连接到Oracle云自动数据库的cx_Oracle留档显示了两种选择:当您将钱包文件放在默认位置时,以及当您没有时。

您可能还想看看博客文章《如何连接到Oracle自治云数据库》。

 类似资料:
  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 验证 SSH 服务器证书(客户端) 和 SSH 用户证书 类似,使用客户端机构认证来验证主机。需要一个 SSH 服务器数字证书认证机构签发服务器证书,客户端只需要保存 CA 的公钥。 使用一台处于气隙系统下的计算机来生成服务器数字证书认证机构的根证书: ❯ ssh-keygen -C "SSH Server Certificate Authority" -f sshserver.root.ca 使

  • 我有一个使用OpenSSL的C客户机,在服务器上的SSL_do_handshake()调用期间,使用服务器端验证失败的证书时,该客户机的测试失败。当应用程序使用TLS 1.2时,服务器上的SSL_do_handshake()故障将在客户端调用SSL_do_handshake()作为故障返回值时报告给客户端。 在将我的应用程序升级到OpenSSL 1.1.1和TLS 1.3时,我注意到验证错误仍在服

  • 这个问题似乎是警告的重复:找不到合适的证书-在没有客户端身份验证的情况下继续,但我遇到了类似的问题,即使客户端证书是由CertificateRequest消息中提到的签名者签名的。 我只是想知道对客户端和服务器(tomcat)使用自签名证书(CA不信任)是否是对客户端身份验证的限制? 我正在尝试通过一个不受任何CA信任的自签名证书(使用keytool创建)使用客户端身份验证与HTTPS服务器建立连

  • 问题内容: 进行客户端或服务器端验证哪个更好? 在我们的情况下,我们正在使用 jQuery和MVC。 在我们的视图和控制器之间传递的JSON数据。 我所做的许多验证工作都是在用户输入数据时对其进行验证。例如,我使用该事件来防止文本框中的字母,设置最大字符数,并且该数字在一定范围内。 我想更好的问题是,与客户端相比,进行服务器端验证是否有任何好处? 真棒的答案大家。我们拥有的网站受到密码保护,并且用

  • 我不知道我到底需要在哪里包含客户机证书。现在,我的第一个问题是我不信任服务器。我尝试使用默认的Java密钥库文件(cacerts),其中包含Thawte和Digicert,这些是我试图与之通信的服务器的根权限。我使用