기본이 아닌 OpenSSL 암호화 제품군을 활성화하는 방법

기본이 아닌 OpenSSL 암호화 제품군을 활성화하는 방법

Ubuntu 20.04에 따라 OpenSSL 1.1.1f를 설치했으며 특히 TLS v1.2 제품군 TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8( ECDHE-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을 독점적으로 사용할 수 있고 예상대로 작동하기 때문에 이 프로필이 작동한다는 것을 확인했습니다(...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를 생성할 수 있습니다.코드에서 애플리케이션 암호화 제품군을 정의하세요.

관련 정보