gpt4 book ai didi

ssl - 如何在 GitHub 操作中存储和使用 SSL/TLS 证书进行身份验证?

转载 作者:行者123 更新时间:2023-12-04 22:35:14 25 4
gpt4 key购买 nike

问题的简短版本是:如何正确存储和使用 SSL/TLS 第三方证书以在 GitHub 操作中使用第三方服务进行身份验证?

长话短说和设置如下:

  1. 我有一个 Kafka 代理作为云服务,使用 SSL/TLS 进行身份验证。服务器给我:
  • CA证书:ca.pem
  • 访问证书:service.cert
  • 访问 key :service.key
  1. 带有消费者和生产者的 Python 项目以及虚拟环境 pipenv如果工作正常,所有这些都将提供给 Kafka 生产者/消费者,并从我运行 Ubuntu 的 PC 上使用这些文件进行授权。

但是,当我尝试对 GitHub 操作执行类似的技巧时,它并没有给我 SSL 错误。这是我的做法:

  1. 将所有文件的内容复制到各自的 github secret 中。 (我已经尝试过很多方法来避免特殊符号问题,但结果总是一样)

  2. 启动消费者或生产者时,它需要所有这 3 个文件的路径,而不是它们的内容。所以我从这样的 key 创建证书文件:

       pipenv run mkdir ${{ github.workspace }}/certs
    pipenv run printf "%s" $(echo ${{ secrets.CA }}) > ${{ github.workspace }}/certs/ca.pem

    pipenv run printf "%s" $(echo ${{ secrets.SERVICE_CERT }}) > ${{ github.workspace }}/certs/service.cert

    pipenv run printf "%s" $(echo ${{ secrets.SERVICE_KEY }}) > ${{ github.workspace }}/certs/service.key

(github actions 将内容隐藏在日志中。无论如何,在这种情况下这不是问题)

  1. 在测试期间,当 Kafka Consumer 尝试连接时,它给我 SSL 错误。其他不需要 Kafka Consumer 的测试(包括使用云数据库的测试)运行良好。所以,这应该是证书的问题。

问题是:我做错了什么以及如何解决这个问题?我搜索了很多,但没有找到任何关于如何正确存储和使用 SSL/TLS 证书/ key 来访问第三方服务的有意义的指南。关于类似案例有一些密切的话题,但没有一个使用适合我的案例的方法。像这样:https://github.com/Apple-Actions/import-codesign-certs或者这个:https://github.community/t/secret-ability-to-store-certificates/16930

我还知道,可以通过在代理上启用 SASL 身份验证或为 Kafka 使用 GitHub 容器解决方案来绕过这个问题。但是,我想了解如何执行此操作。因为它看起来像一个非常常见的案例,但在 Internet 上几乎没有关于它的信息。

错误日志如下所示:

 ../../../.local/share/virtualenvs/<my_proj_name>-2S-aWGK9/lib/python3.9/site-packages/kafka/client_async.py:909: in check_version
version = conn.check_version(timeout=remaining, strict=strict, topics=list(self.config['bootstrap_topics_filter']))
../../../.local/share/virtualenvs/<my_proj_name>-2S-aWGK9/lib/python3.9/site-packages/kafka/conn.py:1238: in check_version
if not self.connect_blocking(timeout_at - time.time()):
../../../.local/share/virtualenvs/<my_proj_name>-2S-aWGK9/lib/python3.9/site-packages/kafka/conn.py:340: in connect_blocking
self.connect()
../../../.local/share/virtualenvs/<my_proj_name>-2S-aWGK9/lib/python3.9/site-packages/kafka/conn.py:401: in connect
self._wrap_ssl()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <kafka.conn.BrokerConnection object at 0x7f5dda56f7c0>

def _wrap_ssl(self):
assert self.config['security_protocol'] in ('SSL', 'SASL_SSL')
if self._ssl_context is None:
log.debug('%s: configuring default SSL Context', self)
self._ssl_context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) # pylint: disable=no-member
self._ssl_context.options |= ssl.OP_NO_SSLv2 # pylint: disable=no-member
self._ssl_context.options |= ssl.OP_NO_SSLv3 # pylint: disable=no-member
self._ssl_context.verify_mode = ssl.CERT_OPTIONAL
if self.config['ssl_check_hostname']:
self._ssl_context.check_hostname = True
if self.config['ssl_cafile']:
log.info('%s: Loading SSL CA from %s', self, self.config['ssl_cafile'])
> self._ssl_context.load_verify_locations(self.config['ssl_cafile'])
E ssl.SSLError: [X509: NO_CERTIFICATE_OR_CRL_FOUND] no certificate or crl found (_ssl.c:4293)

../../../.local/share/virtualenvs/<my_proj_name>-2S-aWGK9/lib/python3.9/site-packages/kafka/conn.py:473: SSLError

最佳答案

根据评论中的建议和github community issue , 以下是您需要执行的步骤:

  • 创建证书文件的base64编码字符串

base64 <certificate_file>

  • 将 base64 字符串存储为 github secret,如下所示 enter image description here

  • 在github中添加以下行

echo "${{ secrets.DC_DEV_SDMS_CERTIFICATE }}" | base64 --decode > <certificate_file_name>

关于ssl - 如何在 GitHub 操作中存储和使用 SSL/TLS 证书进行身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67686405/

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