デフォルト以外のOpenSSL暗号スイートを有効にする方法

デフォルト以外のOpenSSL暗号スイートを有効にする方法

Ubuntu 20.04に従ってOpenSSL 1.1.1fをインストールし、特にTLS v1.2ファミリTLS_ECDHE_ECDSA_WITH_AES_128_CCM_8ECDHE-ECDSA-AES128-CCM8)を有効にしたいと思います。

TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 利用可能

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.cnfOPENSSL_CONFOPENSSL_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を生成できます。コードでアプリケーション暗号化スイートを定義します。

おすすめ記事