Linux için OpenSSL’yi yapılandırma
Konuşma SDK'sı ile OpenSSL, konak sistemi sürümüne dinamik olarak yapılandırılır.
Not
Bu makale yalnızca Konuşma SDK'sının Linux'ta desteklendiği durumlarda geçerlidir.
Bağlantıyı sağlamak için Sisteminizde OpenSSL sertifikalarının yüklü olduğunu doğrulayın. Bir komut çalıştırın:
openssl version -d
Ubuntu/Debian tabanlı sistemlerde çıkış şu şekilde olmalıdır:
OPENSSLDIR: "/usr/lib/ssl"
OPENSSLDIR altında bir certs
alt dizin olup olmadığını denetleyin. Önceki örnekte /usr/lib/ssl/certs
olacaktır.
/usr/lib/ssl/certs
varsa ve çok sayıda tek tek sertifika dosyası içeriyorsa (veya uzantıyla.crt
.pem
), başka eylemlere gerek yoktur.OPENSSLDIR, birden çok ayrı dosya yerine tek bir sertifika paketi dosyası veya dışında
/usr/lib/ssl
bir dosyaysa, sertifikaların nerede bulunabileceğini belirtmek için uygun bir SSL ortam değişkeni ayarlamanız gerekir.
Örnekler
Aşağıda OpenSSL dizini başına yapılandırılan bazı örnek ortam değişkenleri verilmiştir.
- OPENSSLDIR şudur:
/opt/ssl
. Çok sayıda.crt
veya.pem
dosya içeren bircerts
alt dizin vardır. Konuşma SDK'sını kullanmadan önce ortam değişkeniniSSL_CERT_DIR
işaret/opt/ssl/certs
etmek için ayarlayın. Örneğin:
export SSL_CERT_DIR=/opt/ssl/certs
- OPENSSLDIR (
/etc/pki/tls
RHEL tabanlı sistemlerde olduğu gibi). Sertifika paket dosyası içeren bircerts
alt dizin vardır, örneğinca-bundle.crt
. Konuşma SDK'sını kullanmadan önce ortam değişkeniniSSL_CERT_FILE
bu dosyayı işaret etmek için ayarlayın. Örneğin:
export SSL_CERT_FILE=/etc/pki/tls/certs/ca-bundle.crt
Sertifika iptal denetimleri
Konuşma SDK'sı Konuşma hizmetine bağlandığında Aktarım Katmanı Güvenliği (TLS/SSL) sertifikasını denetler. Konuşma SDK'sı, uzak uç nokta tarafından bildirilen sertifikaya güvenildiğini ve iptal edilmemiş olduğunu doğrular. Bu doğrulama, kimlik sahtekarlığına ve diğer ilgili vektörlere karşı bir koruma katmanı sağlar. Denetim, Azure tarafından kullanılan bir sertifika yetkilisinden (CA) sertifika iptal listesi (CRL) alınarak gerçekleştirilir. Güncelleştirilmiş TLS CRL'leri için Azure CA indirme konumlarının listesi bu belgede bulunabilir.
Konuşma hizmeti gibi davranan bir hedef alınan CRL'de iptal edilmiş bir sertifika bildirirse SDK bağlantıyı sonlandırır ve bir Canceled
olay aracılığıyla bir hata bildirir. Bildirilen bir sertifikanın orijinalliği güncelleştirilmiş CRL olmadan denetlenemez. Bu nedenle Konuşma SDK'sı, Azure CA konumundan CRL indirilememesini de hata olarak ele alır.
Uyarı
Çözümünüz ara sunucu veya güvenlik duvarı kullanıyorsa, Azure tarafından kullanılan tüm sertifika iptal listesi URL'lerine erişime izin verecek şekilde yapılandırılmalıdır. Bu URL'lerin çoğunun etki alanı dışında microsoft.com
olduğunu, dolayısıyla erişime *.microsoft.com
izin vermenin yeterli olmadığını unutmayın. Ayrıntılar için bu belgeye bakın. Olağanüstü durumlarda CRL hatalarını yoksayabilirsiniz (muhabir bölümüne bakın), ancak özellikle üretim senaryoları için bu tür bir yapılandırma kesinlikle önerilmez.
Büyük CRL dosyaları (>10 MB)
CRL ile ilgili hataların bir nedeni büyük CRL dosyalarının kullanılmasıdır. Bu hata sınıfı genellikle yalnızca genişletilmiş CA zincirlerine sahip özel ortamlar için geçerlidir. Standart genel uç noktalar bu sorun sınıfıyla karşılaşmamalıdır.
Konuşma SDK'sı (10 MB) tarafından kullanılan varsayılan en büyük CRL boyutu yapılandırma nesnesi başına ayarlanabilir. Bu ayarlamanın özellik anahtarıdır CONFIG_MAX_CRL_SIZE_KB
ve dize olarak belirtilen değer varsayılan olarak "10000" (10 MB) olur. Örneğin, bir SpeechRecognizer
nesne oluştururken (Konuşma hizmeti bağlantısını yöneten), bu özelliği içinde SpeechConfig
ayarlayabilirsiniz. Aşağıdaki kod parçacığında yapılandırma, 15 MB'a kadar CRL dosya boyutuna izin vermek için ayarlanır.
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 hatalarını atlama veya yoksayma
Bir ortam Azure CA konumuna erişecek şekilde yapılandırılamıyorsa Konuşma SDK'sı güncelleştirilmiş bir CRL'yi alamaz. SDK'yi devam edip indirme hatalarını günlüğe kaydedecek veya tüm CRL denetimlerini atlayacak şekilde yapılandırabilirsiniz.
Uyarı
CRL denetimleri bir güvenlik önlemidir ve bunların atlanması saldırılara karşı duyarlılığı artırır. CrL denetimlerinin azaltdığı saldırı vektörlerine karşı koruma için güvenlik etkileri ve alternatif mekanizmalar dikkate alınmadan atlanmamalıdır.
CRL alınamayınca bağlantıya devam etmek için özelliğini "OPENSSL_CONTINUE_ON_CRL_DOWNLOAD_FAILURE"
olarak "true"
ayarlayın. CRL almaya yönelik bir girişimde bulunulmaya devam edilir ve hatalar günlüklerde yine de gösterilir, ancak bağlantı girişimlerinin devam etmesi için izin verilir.
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")
Sertifika iptal denetimlerini kapatmak için özelliğini "OPENSSL_DISABLE_CRL_CHECK"
olarak "true"
ayarlayın. Ardından Konuşma hizmetine bağlanırken CRL'yi denetleme veya indirme girişimi olmaz ve bildirilen TLS/SSL sertifikasının otomatik doğrulaması olmaz.
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 önbelleğe alma ve performans
Konuşma SDK'sı, gelecekteki bağlantıların ilk gecikme süresini iyileştirmek için varsayılan olarak diskte başarıyla indirilen bir CRL'yi önbelleğe alır. Önbelleğe alınmış CRL olmadığında veya önbelleğe alınan CRL'nin süresi dolduğunda yeni bir liste indirilir.
Bazı Linux dağıtımlarında tanımlanmış bir TMP
veya TMPDIR
ortam değişkeni olmadığından Konuşma SDK'sı indirilen CRL'leri önbelleğe almaz. Konuşma SDK'sı tanımlanmamış veya TMPDIR
ortam değişkeni tanımlanmadan TMP
her bağlantı için yeni bir CRL indirir. Bu durumda ilk bağlantı performansını geliştirmek için bir TMPDIR
ortam değişkeni oluşturabilir ve bunu geçici bir dizinin erişilebilir yoluna ayarlayabilirsiniz..