Nepřichází vám pošta z gmailu? Tak to je tím, že máte špatný certifikát pro SMTP na Exchange. To je teďka horká novinka, kterou zažívá čím dál tím víc lidí:-)
Gmail se totiž snaží používat TLS/SSL šifrování pro odesílání mailů a pokud je Exchange nastaven tak, aby ten certifikát měl, ale přitom to není úplně ono, tak vám gmail prostě ty maily nedoručí.
Řešení je buď to opravit a dát tam správný certifikát, což osobně preferuju. Nebo vypnout TLS/SSL na tom Receive Connectoru, který příjímá z internetu.
Symptomy
V logu se vám zobrazují hlášky typu:
Event Type: Error
Source: Schannel
Event ID: 36874
Message: An TLS 1.0 connection request was received from a remote client application,
but none of the cipher suites supported by the client application are supported by the
server. The SSL connection request has failed.
Event type: Error
Source: Schannel
Event ID: 36888
Message: The following fatal alert was generated: 40. The internal error state is 1205 or 1204
Note: Error 40 stands for TLS1_ALERT_HANDSHAKE_FAILURE
V Network Monitoru se vám zobrazují pakety typu:
SMTP Cmd:STARTSSL
SSL ClientHello from google gmail
Version: TLS 1.0
TLS_RSA_WITH_RC4_128_SHA
TLS_RSA_WITH_RC4_128_MD5
SSL_CK_RC4_128_WITH_MD5
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_3DES_EDE_CBC_SHA
SSL_CK_DES_192_EDE3_CBC_WITH_MD5
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA
with immediatelly following TCP FIN or TCP RST packets from the server side or
SSL ServerHello
Version: TLS 1.0
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Důvod
Po cca 18 hodinách řešení jsem konečně identifikoval důvod a správné řešení. Problém je způsoben výchozími volbami průvodce vydávání certifikátů ve Windows Server 2008. Když si totiž objednáváte veřejný certifikát (například na StartSSL nebo GoDaddy, nebo kdekoliv jinde), můžete si jeho požadavek vygenerovat pomocí průvodce Create Custom Certificate Request v konzoli Certificates. Jeho výchozí volby jsou ale úplně na hovno. A to pak způsobuje problémy pro Schannel CSP (Cryptographic Service Provider), který se ve Windows právě používá na šifrování TLS a SSL.
Výchozí volba toho průvodce je totiž Microsoft Strong Cryptographic Provider (Signature) a to je hoodně špatně. On totiž Schannel potřebuje, aby certifikát byl uložen buď v Microsoft RSA SChannel Cryptographic Provider, nebo v Microsoft DH Schannel Cryptographic Provider, které jsou jako jediné plně podporované. Bohužel si to zřejmě MS neuvědomil a výchozí volba je tedy špatně.
Jak poznáte jestli máte problém?
Spusťte si příkazovou řádku (CMD) a do ní si napište následující příkaz:
CERTUTIL -verifystore my
Tenhle vám vypíše nějaké informace o všech certifikátech, které máte v úložišti počítače. Najděte si mezi nimi ten svůj a hledejte v něm zmínku právě o poskytovateli, který spravuje privátní klíč daného certifikátu:
Provider = Microsoft Strong Cryptographic Provider
KeySpec = 2 -- AT_SIGNATURE
Pokud tam máte toto, tak to je špatně! Jediné řešení je vygenerovat ten certifikát znovu a použít k tomu správného poskytovatele. Ještě jednou opakuji, správným poskytovatelem je:
The only correct and supported CSP for Schannel TLS/SSL encryption are:
Microsoft RSA SChannel Cryptographic Provider
Microsoft DH Schannel Cryptographic Provider
or CNG providers