gpt4 book ai didi

python - grpc Python : ignore untrusted certificate

转载 作者:行者123 更新时间:2023-11-28 18:07:17 32 4
gpt4 key购买 nike

我想为我信任的来源创建一个 grpc channel ,但我缺少其证书。使用默认凭据设置安全通道失败:

import gprc
ssh_channel = grpc.secure_channel(<gprc url>, grpc.ssl_channel_credentials())
grpc.channel_ready_future(ssh_channel).result()

结果:

E1017 10:05:15.783011100   11539 ssl_transport_security.cc:1229] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.
E1017 10:05:16.846366639 11539 ssl_transport_security.cc:1229] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.
E1017 10:05:18.688887874 11539 ssl_transport_security.cc:1229] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.
E1017 10:05:21.557399186 11539 ssl_transport_security.cc:1229] Handshake failed with fatal error SSL_ERROR_SSL: error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED.

我知道这是可能的,因为例如在 Java 中,可以执行以下操作:

import io.grpc.netty.GrpcSslContexts;
import io.grpc.netty.NettyChannelBuilder;
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
...
sslContext = GrpcSslContexts.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
channel = NettyChannelBuilder.forAddress(<gprc url>, 443).sslContext(sslContext).build();

但是我还没有找到任何类似的 Python 方法。grpc.secure_channel 的文档也描述了一个 option 参数,根据文档是:

An optional list of key-value pairs (channel args in gRPC Core runtime) to configure the channel.

对 channel 参数的引用 here也不提供任何帮助。有什么想法吗?

更新:(19/01/14):

有一个在 Python 代码中添加此选项的公开拉取请求,但它似乎在 PR 中停留了几个月:https://github.com/grpc/grpc/pull/12656

最佳答案

您可能必须在单独的步骤中从站点获取证书。如果它可以是一次性的,只需使用您的浏览器并将证书保存在方便的地方。否则,请参阅 How can I retrieve the TLS/SSL peer certificate of a remote host using python? .

在我的例子中,我用浏览器保存了证书并执行了以下操作(我需要用证书中的目标名称覆盖目标名称,因为它是自签名的并且域名不匹配):

with open(cert_path, 'rb') as f:
cert_bytes = f.read()

credentials = grpc.ssl_channel_credentials(cert_bytes)
# Deal with cert being self-signed:
cert_cn = "cn.from.cert.com" # or parse it out of the cert data
options = (('grpc.ssl_target_name_override', cert_cn,),)

channnel = grpc.secure_channel(target, credentials, options)

关于python - grpc Python : ignore untrusted certificate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52851016/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com