Docker Ruby SSL_connect returned=1 errno=0 state=error:错误的签名类型

omhiaaxx  于 2023-03-29  发布在  Docker
关注(0)|答案(3)|浏览(276)

我在一个Docker容器中使用法拉第运行了一个相当简单的HTTP客户端:

conn = Faraday.new("https://jinio.com.ph")
conn.post("/tracker", {p: @code}.to_json, {"Content-Type" => "application/json"})

此代码在容器内返回SSL错误“错误的签名类型”。

Faraday::SSLError (SSL_connect returned=1 errno=0 state=error: wrong signature type)

有什么办法解决这个问题吗?仅供参考,如果我在MacOS上运行这个,代码运行没有错误
我的Dockerfile如果这有帮助:

FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client nano
RUN mkdir /app
WORKDIR /app
COPY Gemfile /app/Gemfile
COPY Gemfile.lock /app/Gemfile.lock
RUN bundle install
COPY . /app

# Script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start server
CMD ["rails", "server", "-b", "0.0.0.0"]
ve7v8dk2

ve7v8dk21#

我遇到了相同的问题,通过修改Dockerfile解决了该问题。
FROM ruby:2.7之后添加
RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/' /etc/ssl/openssl.cnf
Origin source(日文):
https://qiita.com/masayuki14/items/c34eafb9d6130e2c5b67

gzszwxb4

gzszwxb42#

可接受的解决方案不能开箱即用,因为我需要使用OpenSSL 1.1.1f 31 Mar 2020Ubuntu 20.04.3 LTS上修复该问题。我在https://askubuntu.com/a/1233456/306766上找到的解决方案对我有效。
您需要将以下内容添加到配置文件(/etc/ssl/openssl.cnf)的开头:

openssl_conf = default_conf

最后是这样的:

[ default_conf ]

ssl_conf = ssl_sect

[ssl_sect]

system_default = system_default_sect

[system_default_sect] MinProtocol = TLSv1.2 CipherString =
DEFAULT:@SECLEVEL=1
raogr8fs

raogr8fs3#

我最近在Docker容器中运行一个非常旧的Rails应用程序时遇到了这个问题(使用ruby-2.3.3的基础映像)。
这个very helpful blog post持有解决方案,但总的来说,Let's Encrypt的旧ca证书在2021年到期。ca证书中有一个有效的版本(请参阅帖子中的步骤以确认),但过期的版本需要注解掉。
将这一行添加到我的Dockerfile中为我解决了这个问题:

RUN sed -i '/^mozilla\/DST_Root_CA_X3/s/^/!/' /etc/ca-certificates.conf \
  && update-ca-certificates -f

相关问题