web-dev-qa-db-ja.com

署名ハッシュアルゴリズムSHA256(証明書)とピア署名ダイジェスト:SHA1

クライアントとして、会社のAPIを使用しています。接続できるようにするには、_CipherString = DEFAULT@SECLEVEL = 1_を使用して_/etc/ssl/openssl.cnf_のセキュリティレベルを_OpenSSL 1.1.1d_に下げる必要があります。

次に、_openssl s_client -connect <servername>:443_を実行すると、次のようになります。

_...
No client certificate CA names sent
Peer signing digest: SHA1
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 4499 bytes and written 443 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: XXXXXXX
    Session-ID-ctx:
    Master-Key: XXXXXXXX
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1579345646
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
_

Google Chromeと言う:

_Connection - obsolete connection settings
The connection to this site is encrypted and authenticated using TLS 1.2, ECDHE_RSA with P-256, and AES_256_GCM.
The server signature uses SHA-1, which is obsolete. Enable a SHA-2 signature algorithm instead. (Note this is different from the signature in the certificate.)
_

質問:

  1. _Peer signing digest_とSignature hash algorithm (Certificate)の関係は何ですか?
  2. https://www.ssllabs.com/ssltest/ のときにSHA1と接続される理由はAになります。
  3. クライアントとして何かできますか?
  4. サーバーで何を変更すればよいですか?

追加情報:

_openssl s_client -connect <servername>:443 -sigalgs <algorithm>+<hash>

(For OpenSSL 1.1.1d:  SECLEVEL=2)
ECDSA+SHA512  sslv3 alert handshake failure
ECDSA+SHA384  sslv3 alert handshake failure
ECDSA+SHA256  sslv3 alert handshake failure
ECDSA+SHA1    sslv3 alert handshake failure
RSA+SHA512    sslv3 alert handshake failure
RSA+SHA384    wrong signature type
RSA+SHA256    wrong signature type
RSA+SHA1      no suitable signature algorithm


(For OpenSSL 1.1.1d: SECLEVEL=1)
ECDSA+SHA512  sslv3 alert handshake failure
ECDSA+SHA384  sslv3 alert handshake failure
ECDSA+SHA256  sslv3 alert handshake failure
ECDSA+SHA1    sslv3 alert handshake failure
RSA+SHA512    sslv3 alert handshake failure
RSA+SHA384    connects with peer signing digest SHA1 type RSA
RSA+SHA256    connects with peer signing digest SHA1 type RSA
RSA+SHA1      connects with peer signing digest SHA1 type RSA

(For OpenSSL 1.0.2k)
ECDSA+SHA512  sslv3 alert handshake failure
ECDSA+SHA384  sslv3 alert handshake failure
ECDSA+SHA256  sslv3 alert handshake failure
ECDSA+SHA1    sslv3 alert handshake failure
RSA+SHA512    connects with peer signing digest SHA1 type RSA
RSA+SHA384    connects with peer signing digest SHA1 type RSA
RSA+SHA256    connects with peer signing digest SHA1 type RSA
RSA+SHA1      connects with peer signing digest SHA1 type RSA
_
1
TicJit

ピア署名ダイジェストと署名ハッシュアルゴリズム(証明書)の関係は何ですか?

ピア署名ダイジェストは、TLSハンドシェイク中に署名するときにピアが使用するアルゴリズムです-参照 OpenSSLのピア署名ダイジェストとはs_client接続? 。これは証明書とは無関係です。 署名ハッシュアルゴリズム(証明書)は、代わりに、証明書の発行者が証明書に署名するために使用するダイジェストアルゴリズムです。

https://www.ssllabs.com/ssltest/ のときにSHA1に接続される理由はAになります。

両方の場合のセキュリティ要件は異なります。 ピア署名ダイジェストは、TLSハンドシェイク中に破壊されないように十分に強くなければなりません。 署名ハッシュアルゴリズム(証明書)は、発行者の証明書のキーが有効である限り壊れないようにする必要があります。つまり、現時点では、TLSハンドシェイクの保護にはSHA-1で十分ですが、証明書の署名には不十分です。

クライアントとして何かできますか?

TLS 1.2では、クライアントはハンドシェイクでサポートされているダイジェストアルゴリズムを送信できます。クライアントがSHA-1を提供しない場合、サーバーはSHA-1を使用しないでください。つまり、クライアントが提供する他のアルゴリズムを使用する可能性があるか、接続が失敗します。 -sigalgsオプションopenssl s_client。サーバーは、サポートされているアルゴリズムに関するクライアントからの情報を単に無視する可能性があることに注意してください。これは、セットアップではそうであるようです。この場合、クライアントとしてできることは何もありません。

サーバーで何を変更すればよいですか?

サーバーについては何もわかっていないため、ここでは推奨事項を実行できません。サーバーによっては、TLSハンドシェイクの署名アルゴリズムを設定するオプションがある場合と、そのようなオプションがない場合があります。

2
Steffen Ullrich