Недавно экспериментировал с JavaMail и наткнулся на интересную «особенность» работы Avast! Mail Scanner (сканер). При включенном сканере не удавалось соединиться с SMTP сервером с включенным SSL/TLS, в частности с smtp.yandex.ru:465. Небольшое исследование показало, что эта проблема вызвана проблемой с сертификатом для этого сервера и эта проблема вызвана именно сканером.
При включенном сканере и попытке SSL соединения с smtp.yandex.ru:465 сертификат отдаваемый этим сервисом не проходит проверку. Внимательный взгляд на это сертификат показал, что выдан он «avast! Mail Scanner Root»:
[
Version: V3
Subject: EMAILADDRESS=pki@yandex-team.ru, CN=smtp.yandex.ru, ST=Russian Federation, L=Moscow, OU=ITO, O=Yandex LLC, C=RU
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 2048 bits
modulus: <опущено>
public exponent: 65537
Validity: [From: Tue Dec 10 14:22:38 MSK 2013,
To: Fri Dec 09 14:22:38 MSK 2016]
Issuer: CN=avast! Mail Scanner Root, O=avast! Mail Scanner, OU=generated by avast! antivirus for SSL scanning
SerialNumber: [ 0104a020]
Certificate Extensions: 8
[1]: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: B8 3B 67 E0 33 60 3B 54 68 48 C2 B9 6D 59 43 28 .;g.3`;ThH..mYC(
0010: A5 61 91 7A .a.z
]
При отключении Avast! имеем:
[
Version: V3
Subject: EMAILADDRESS=pki@yandex-team.ru, CN=smtp.yandex.ru, ST=Russian Federation, L=Moscow, OU=ITO, O=Yandex LLC, C=RU
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
Key: Sun RSA public key, 2048 bits
modulus: <опущено>
public exponent: 65537
Validity: [From: Tue Dec 10 14:22:38 MSK 2013,
To: Fri Dec 09 14:22:38 MSK 2016]
Issuer: CN=Certum Level IV CA, OU=Certum Certification Authority, O=Unizeto Technologies S.A., C=PL
SerialNumber: [ 134114dc 3d88f814 806682cc 0ef22bd4]
Certificate Extensions: 10
[1]: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=false
AuthorityInfoAccess [
[
accessMethod: ocsp
accessLocation: URIName: http://ocsp.certum.pl
,
accessMethod: caIssuers
accessLocation: URIName: http://www.certum.pl/l4.cer
]
Соответственно, издатель сертификата валидный и всё работает нормально. Просто Java хранилище сертификатов не содержит доверенного сертификата от Avast! и закономерно ругается.
Вроде бы и понятно, что антивирус пытается сканировать шифрованый трафик, но таким макаром ему не составит никакого труда подписать/подменить и любой левый сертификат и пользователь даже не заметит этого, если пользуется штатными средствами Windows с использованием системного хранилища сертификатов, где авастовский прописывается при установке.
P.S Для просмотра сертификатов использовался InstallCert.java.