Share via


Linux용 OpenSSL 구성

주의

이 문서에서는 EOL(수명 종료) 상태에 가까워진 Linux 배포판인 CentOS를 참조하세요. 이에 따라 사용 및 계획을 고려하세요. 자세한 내용은 CentOS 수명 종료 지침을 참조 하세요.

Speech SDK를 사용하면 OpenSSL이 호스트 시스템 버전에 맞게 동적으로 구성됩니다.

참고 항목

이 문서는 Linux에서 Speech SDK가 지원되는 경우에만 적용됩니다.

연결을 보장하려면 OpenSSL 인증서가 시스템에 설치되어 있는지 확인합니다. 다음 명령을 실행합니다.

openssl version -d

Ubuntu/Debian 기반 시스템의 출력은 다음과 같습니다.

OPENSSLDIR: "/usr/lib/ssl"

OPENSSLDIR 아래에 certs 하위 디렉터리가 있는지 확인합니다. 위의 예제에서는 /usr/lib/ssl/certs입니다.

  • /usr/lib/ssl/certs가 있고 여기에 많은 개별 인증서 파일(.crt 또는 .pem 확장자 포함)이 포함되어 있으면 추가 작업이 필요하지 않습니다.

  • OPENSSLDIR이 /usr/lib/ssl이 아니거나 여러 개별 파일 대신 단일 인증서 번들 파일이 있는 경우 인증서를 찾을 수 있는 위치를 나타내기 위해 적절한 SSL 환경 변수를 설정해야 합니다.

예제

다음은 OpenSSL 디렉터리별로 구성할 몇 가지 환경 변수 예제입니다.

  • OPENSSLDIR은 /opt/ssl입니다. .crt 또는 .pem 파일이 많은 certs 하위 디렉터리가 있습니다. Speech SDK를 사용하기 전에 /opt/ssl/certs를 가리키도록 SSL_CERT_DIR 환경 변수를 설정합니다. 예시:
export SSL_CERT_DIR=/opt/ssl/certs
  • OPENSSLDIR은 /etc/pki/tls입니다(RHEL/CentOS 기반 시스템에서와 같이). 인증서 번들 파일이 있는 certs 하위 디렉터리(예: ca-bundle.crt)가 있습니다. Speech SDK를 사용하기 전에 해당 파일을 가리키도록 SSL_CERT_FILE 환경 변수를 설정합니다. 예시:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt

인증서 해지 확인

Speech SDK는 Speech Service에 연결할 때 전송 계층 보안(TLS/SSL) 인증서를 확인합니다. Speech SDK는 원격 엔드포인트에서 보고한 인증서가 신뢰할 수 있고 해지되지 않았는지 확인합니다. 이 확인은 스푸핑 및 기타 관련 벡터와 관련된 공격에 대한 보호 계층을 제공합니다. Azure에서 사용하는 CA(인증 기관)에서 CRL(인증서 해지 목록)을 검색하여 검사를 수행합니다. 업데이트된 TLS CRL의 Azure CA 다운로드 위치 목록은 이 문서에서 찾을 수 있습니다.

Speech Service로 가장하는 대상이 검색된 CRL에서 해지된 인증서를 보고하는 경우 SDK는 연결을 종료하고 Canceled 이벤트를 통해 오류를 보고합니다. 업데이트된 CRL이 없으면 보고된 인증서의 신뢰성을 확인할 수 없습니다. 따라서 Speech SDK는 Azure CA 위치에서 CRL을 다운로드하지 못하는 것을 오류로 처리합니다.

Warning

솔루션이 프록시 또는 방화벽을 사용하는 경우 Azure에서 사용하는 모든 인증서 해지 목록 URL에 대한 액세스를 허용하도록 구성해야 합니다. 이러한 URL 중 다수는 microsoft.com 도메인 외부에 있으므로 *.microsoft.com에 대한 액세스를 허용하는 것만으로는 충분하지 않습니다. 자세한 내용은 이 문서를 참조하세요. 예외적인 경우 CRL 오류를 무시할 수 있지만(관련 섹션 참조) 이러한 구성은 특히 프로덕션 시나리오의 경우 권장되지 않습니다.

대용량 CRL 파일(>10MB)

CRL 관련 실패의 한 가지 원인은 큰 CRL 파일의 사용입니다. 이 오류 클래스는 일반적으로 확장된 CA 체인이 있는 특수 환경에만 적용됩니다. 표준 퍼블릭 엔드포인트에서는 이 유형의 문제가 발생하지 않아야 합니다.

Speech SDK에서 사용하는 기본 최대 CRL 크기(10MB)는 구성 개체별로 조정할 수 있습니다. 이 조정의 속성 키는 CONFIG_MAX_CRL_SIZE_KB이고 문자열로 지정된 값은 기본적으로 "10000"(10MB)입니다. 예를 들어, Speech Services에 대한 연결을 관리하는 SpeechRecognizer 개체를 만들 때 SpeechConfig에서 이 속성을 설정할 수 있습니다. 아래 코드 조각에서 구성은 최대 15MB의 CRL 파일 크기를 허용하도록 조정됩니다.

config.SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config->SetProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
config.setProperty("CONFIG_MAX_CRL_SIZE_KB"", "15000");
speech_config.set_property_by_name("CONFIG_MAX_CRL_SIZE_KB"", "15000")
speechConfig.properties.SetPropertyByString("CONFIG_MAX_CRL_SIZE_KB", "15000")

CRL 실패 무시

Azure CA 위치에 액세스하도록 환경을 구성할 수 없는 경우 Speech SDK는 업데이트된 CRL을 검색할 수 없습니다. 계속해서 다운로드 실패를 기록하거나 모든 CRL 검사를 무시하도록 SDK를 구성할 수 있습니다.

Warning

CRL 검사는 보안 조치이며 이를 무시하면 공격에 대한 취약성이 높아집니다. CRL 검사가 완화하는 공격 벡터로부터 보호하기 위한 보안 영향과 대체 메커니즘을 철저히 고려하지 않고 무시해서는 안 됩니다.

CRL을 검색할 수 없을 때 연결을 계속하려면 "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE" 속성을 "true"로 설정합니다. 여전히 CRL 검색을 시도하고 실패가 로그에 표시되지만 연결 시도는 계속할 수 있습니다.

config.SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config->SetProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
config.setProperty("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true");
speech_config.set_property_by_name("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")

speechConfig.properties.SetPropertyByString("OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE", "true")

인증서 해지 확인을 비활성화하려면 "OPENSSL_DISABLE_CRL_CHECK" 속성을 "true"로 설정합니다. 그러면 Speech Services에 연결하는 동안 CRL을 확인하거나 다운로드하려고 시도하지 않으며 보고된 TLS/SSL 인증서의 자동 확인도 수행되지 않습니다.

config.SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config->SetProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
config.setProperty("OPENSSL_DISABLE_CRL_CHECK", "true");
speech_config.set_property_by_name("OPENSSL_DISABLE_CRL_CHECK", "true")
speechConfig.properties.SetPropertyByString("OPENSSL_DISABLE_CRL_CHECK", "true")

CRL 캐싱 및 성능

기본적으로 Speech SDK는 성공적으로 다운로드된 CRL을 디스크에 캐시하여 향후 연결의 초기 대기 시간을 개선합니다. 캐시된 CRL이 없거나 캐시된 CRL이 만료되면 새 목록이 다운로드됩니다.

일부 Linux 배포에는 정의된 TMP 또는 TMPDIR 환경 변수가 없으므로 Speech SDK는 다운로드한 CRL을 캐시하지 않습니다. TMP 또는 TMPDIR 환경 변수가 정의되지 않은 경우 Speech SDK는 각 연결에 대해 새 CRL을 다운로드합니다. 이 상황에서 초기 연결 성능을 개선시키려면 TMPDIR 환경 변수를 만들고 이를 임시 디렉터리의 액세스 가능한 경로로 설정할 수 있습니다.

다음 단계