Ubuntu 20.04に従ってOpenSSL 1.1.1fをインストールし、特にTLS v1.2ファミリTLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
(ECDHE-ECDSA-AES128-CCM8
)を有効にしたいと思います。
TLS用のOpenSSLインストールを使用する他のアプリケーションがこの暗号スイートを使用できるようにOpenSSLを構成するにはどうすればよいですか?
私のユースケースの詳細:.NET(6)アプリケーションがあります.NETは現在OpenSSLを使用しています。1.1.1以降は次のようにインストールされます。Linuxの低レベルTLSプロバイダ。したがって、私が知っている限り、アプリケーションがOpenSSLを使用している場合は、CCM暗号化スイートを許可するようにOpenSSLを設定する必要があります。 (openssl.cnf
に従って使用されますopenssl version -d
)
OpenSSLマニュアルの設定セクションで、設定に興味があるモジュールがあることを確認し、ssl_conf
次のcnfを作成しました。
openssl_conf = default_conf
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
CipherString = ECDHE-ECDSA-AES128-CCM8
ただし、これはアプリケーションがTLS_ECDHE_ECDSA_WITH_AES_128_CCM_8を使用することを許可しません。私のTLS_ECDHE_ECDSA_WITH_AES_128_CCM_8排他的なクライアントが接続しようとすると、アプリケーションが内部的にエラーを引き起こすため、ハンドシェイク40で失敗します。'Interop.OpenSsl.SslException' in System.Net.Security.dll
ただし、暗号化文字列の唯一のフィルタとしてTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256の代わりに次のcnfを使用すると、アプリケーションがTLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256を排他的に使用でき、期待どおりに機能するため、このプロファイルが機能することを確認しました。
...
[system_default_sect]
CipherString = ECDHE-RSA-AES128-GCM-SHA256
TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8を有効にするには?
そして、CCMが有効になっていることを確認する方法がわかりません...実行するとopenssl ciphers -v
(パスワード文字列フィルタなし)、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256がリストされているようにCCM8がリストされていることがわかります。
私はこの料理本の構成セクションを読みました。https://www.feistyduck.com/library/openssl-cookbook/online/openssl-command-line/configuration.htmlところで、CCM8がただ使えない理由については、経験豊富なアドバイスが必要になりそうです。
ベストアンサー1
.NETアプリケーションで使用するために非デフォルト暗号化スイートを「有効にする」には、OpenSSLを構成する必要があります。 .NETアプリケーションなどの多くのフレームワークアプリケーションは、内部的にOpenSSLを使用しています。 OpenSSL設定を作成し、環境変数を設定OPENSSL_CONF
ファイルのフルパスに設定できます。 OpenSSLを使用するほとんどのアプリケーションは、OPENSSL_CONF
環境変数を使用してOpenSSLを使用するときに使用する必要がある構成ファイルを取得します。 OpenSSLは、openssl.cnf
すべての暗号スイートを有効にしないデフォルト設定を使用して、アプリケーションが安全性の低い暗号スイートを使用しないようにします。
アプリケーションの使用が許可されている場合は、TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
次の構成ファイルを生成できます。
# myCustomOpenSSL.cnf
openssl_conf = default_conf
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
#CipherString is a colon separated list of terms that filter what TLS v1.2 suites OpenSSL will allow use of.
[system_default_sect]
CipherString = ECDHE-ECDSA-AES128-CCM8
その後、同じシェルインスタンスでアプリケーションを起動する前に設定するかOPENSSL_CONF
(それで正しい)、アプリケーションを開発している場合はアプリケーションコードで設定できます。/example/path/myCustomOpenSSL.cnf
OPENSSL_CONF
OPENSSL_CONF
...
私の問題は、ECDSA証明書をアプリケーションに提供できなかったことです。TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
このアプリケーションを使用するには〜しなければならないECDSA証明書が必要です。つまり、ECDSAキーで署名してください。私はVisual Studioで作業しており、WSLを介してアプリケーションを実行しています。 NETのVisual Studioの/etc/ssl/certs
既定の開発証明書はRSAベースであるため、アプリケーションに証明書がないと文句を言うわけではありませんが、互換性のない証明書があるため、例外が発生します'Interop.OpenSsl.SslException' in System.Net.Security.dll
。
そこで、基本的に開発されたRSAベースの証明書の代わりにECDSAベースの証明書を使用するようにアプリケーションを設定してみました。
だから私が作成したcnfファイルを「アクティブ化」しようとしていますTLS_ECDHE_ECDSA_WITH_AES_128_CCM_8
。
注:.NETでは、暗号スイートの選択にOpenSSL cnfを使用する必要はありません。CipherSuitePolicyを生成できます。コードでアプリケーション暗号化スイートを定義します。