Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
6
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

SSL通信でCaused by OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: wrong signature type が出たらOpenSSLの設定を変える

Rubyで外部のAPIにSSLで接続したらエラーが出た。

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

このエラーの対処法についてまとめ

結論

OpenSSLの設定ファイル /etc/ssl/openssl.cnf のセキュリティレベルを以下のように変える。

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT@SECLEVEL=1
< CipherString = DEFAULT@SECLEVEL=2
---
> CipherString = DEFAULT@SECLEVEL=1

発生している環境

ruby:2.6.6のコンテナイメージ。
OSはDebianなのでDebian系のコンテナだと同じ現象が発生する可能性がある。

コンテナで確認したらDebian10.4だった。

# cat /etc/debian_version
10.4

ruby:2.6.6のDockerfileのFROMをたどっていくとdebian:busterにたどり着くことからもDebian10.4であることがわかる。

原因

OpenSSLを使って暗号化通信(SSL,TLS)を外部と行うとき、Debianではデフォルトでより安全な設定が行われている。
このとき証明書の署名ではSHA-1はサポートされなくなり、少なくともSHA-256が必要となる。
相手側が少なくともTLS1.2以降をサポートしていない場合にエラーが発生する。

https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1
公式のWikiにも記載がある。

Dockerfileで自動で編集する方法

sed コマンドを使って設定ファイルを編集できます。

FROM ruby:2.6.6

RUN sed -i 's/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/' /etc/ssl/openssl.cnf

注意したいこと

同じようなエラーで、

OpenSSL::SSL::SSLError SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

というものがあり、エラーメッセージで検索すると、これの検索結果も混じってくるので注意したいところ。
証明書を http://curl.haxx.se/ca/cacert.pem からダウンロードして設置、みたいなことはやっても関係ない。

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
6
Help us understand the problem. What are the problem?