ser*_*gii 3 ssl apache-kafka tls1.2 pipenv github-actions
问题的简短版本是:如何正确存储和使用 SSL/TLS 第三方证书以在 GitHub 操作中使用第三方服务进行身份验证?
长篇故事和设置如下:
但是,当我尝试对 GitHub 操作执行类似的技巧时,它不会给我 SSL 错误。这就是我所做的:
将所有文件的内容复制到各自的 github Secret 中。(我已经尝试了很多方法来避免特殊符号问题,但结果总是相同的)
当消费者或生产者启动时,它需要所有这 3 个文件的路径,而不是它们的内容。因此,我从密钥创建证书文件,如下所示:
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
Run Code Online (Sandbox Code Playgroud)
(github actions 隐藏了日志中的内容。无论如何,在这种情况下这不是问题)
问题是:我做错了什么以及如何解决这个问题?我进行了很多搜索,但没有找到任何关于如何正确存储和使用 SSL/TLS 证书/密钥来访问第三方服务的有意义的指南。 关于类似案例有一些密切的主题,但没有一个使用适合我的案例的方法。像这样: https: //github.com/Apple-Actions/import-codesign-certs或这样:https://github.community/t/secret-ability-to-store-certificates/16930
我还知道,可以通过在代理上启用 SASL 身份验证或使用 Kafka 的 GitHub 容器解决方案来绕过此问题。但是,我想了解如何做到这一点。因为这看起来是一个很常见的案例,但互联网上几乎没有关于它的信息。
错误日志如下所示:
../../../.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
Run Code Online (Sandbox Code Playgroud)
根据评论和github 社区问题中的建议,您需要执行以下步骤:
base64 <证书文件>
回声“${{secrets.DC_DEV_SDMS_CERTIFICATE}}”| base64 --decode > <证书文件名>
| 归档时间: |
|
| 查看次数: |
4518 次 |
| 最近记录: |