منذ أن قام موفر البريد الإلكتروني الخاص بنا بتغيير شهادة SSL الخاصة به ، يرفض عميل POP3 المستند إلى mono الاتصال بخادم POP الآمن لتنزيل رسائل البريد الإلكتروني. العملاء الآخرون ليس لديهم مشكلة ؛ على سبيل المثال Thunderbird و Outlook ؛ ولا معظم مواقع مدقق SSL القادرة على فحص المنافذ الفردية باستثناء هذا . لقد كنت أعمل مع كلا الموفرين في محاولة لتحديد المشكلة ، لكنني وصلت أخيرًا إلى طريق مسدود مع كليهما ، لأنني لا أعرف ما يكفي عن شهادات SSL لأتمكن من توجيه أي من مقدمي الخدمة لفهم مكان الخطأ.

أثناء التحقيق ، تم لفت انتباهي إلى الاختلاف في إخراج الأمرين التاليين (لقد أزلت الشهادات من الإخراج لسهولة القراءة):

echo "" | openssl s_client -showcerts -connect pop.gmail.com:995

CONNECTED(00000003)
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
   i:/C=US/O=Google Inc/CN=Google Internet Authority G2
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
---
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=pop.gmail.com
issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2
---
No client certificate CA names sent
---
SSL handshake has read 3236 bytes and written 435 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
    Session-ID: 745F84194498529B91B7D9194363CBBD23425446CF2BFF3BF5557E3C6606CA06
    Session-ID-ctx:
    Master-Key: DED1AE0A44609F9D6F54626F4370ED96436A561A59F64D66240A277066322DCD2CCB9A6D198C95F4D2B0C7E6781EECD2
    Key-Arg   : None
    Start Time: 1397678434
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)
---
+OK Gpop ready for requests from 69.3.61.10 c13mb42148040pdj
DONE

echo "" | openssl s_client -showcerts -connect secure.emailsrvr.com:995

CONNECTED(00000003)
depth=2 /C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
 0 s:/serialNumber=tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD/OU=4159320284/OU=See www.rapidssl.com/resources/cps (c)14/OU=Domain Control Validated - RapidSSL(R)/CN=secure.emailsrvr.com
   i:/C=US/O=GeoTrust, Inc./CN=RapidSSL CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
 1 s:/C=US/O=GeoTrust, Inc./CN=RapidSSL CA
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
   i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
---
Server certificate
subject=/serialNumber=tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD/OU=4159320284/OU=See www.rapidssl.com/resources/cps (c)14/OU=Domain Control Validated - RapidSSL(R)/CN=secure.emailsrvr.com
issuer=/C=US/O=GeoTrust, Inc./CN=RapidSSL CA
---
No client certificate CA names sent
---
SSL handshake has read 3876 bytes and written 319 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 3F4EE3992B46727BE2C7C3E76A9A6A8D64D66EE843CB1BB17A76AE2E030C7161
    Session-ID-ctx:
    Master-Key: 016209E50432EFE2359DB73AB527AF718152BFE6F88215A9CE40604E8FF2E2A3AC97A175F46DF737596866A8BC8E3F7F
    Key-Arg   : None
    Start Time: 1397678467
    Timeout   : 300 (sec)
    Verify return code: 19 (self signed certificate in certificate chain)
---
DONE

لقد كنت أحاول فهم ما إذا كان هذا مفيدًا ، لأنه عندما -CApathيتم توفير الخيار ، فإن الأوامر لا تنتج أي أخطاء:

openssl s_client -CApath /etc/ssl/certs -showcerts -connect secure.emailsrvr.com:995

CONNECTED(00000003)
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = "GeoTrust, Inc.", CN = RapidSSL CA
verify return:1
depth=0 serialNumber = tG0GnsyAUkdX7DEo15ylNBjQJqAWZ/dD, OU = 4159320284, OU = See www.rapidssl.com/resources/cps (c)14, OU = Domain Control Validated - RapidSSL(R), CN = secure.emailsrvr.com
verify return:1
...

openssl s_client -CApath /etc/ssl/certs -showcerts -connect pop.gmail.com:995

CONNECTED(00000003)
depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority
verify return:1
depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA
verify return:1
depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = pop.gmail.com
verify return:1
...

يمكنني أيضًا استخدام -CAfileالخيار بنجاح بعد تنزيل شهادة CAfile مباشرة من GeoTrust.

ومع ذلك ، يبدو أن Fog Creek يعتقد أن المشكلة تكمن في الشهادة ، لأنهم حاولوا إضافة الشهادة إلى Trustمتجر mono دون نجاح. لا أتفق معهم ، ولكن (كما هو مذكور أعلاه) في حين أن معظم مدققات SSL إما لا تتحقق من المنفذ 995 أو تنجح أثناء المحاولة ، وجدت هذه الصفحة التي تنتج خطأ SSL 7.

هل أفسر الإخراج بشكل صحيح على أنه لا يوجد خطأ في الشهادة؟

answer

الجواب (كما هو موضح في منشور الأمان هذا ) هو أن شهادتي GeoTrust Global CA التي تراها في السلسلة ليستا في الحقيقة نفس الشهادة ، أحدهما مشتق من الأخرى.

بسبب CA التوقيع المتقاطع!

عندما تم إنشاء شهادة GeoTrust Global CA وتوقيعها لأول مرة ، لم يكن لديها جهاز كمبيوتر / متصفحات / تطبيقات في متجرها الموثوق.

من خلال الحصول على مرجع مصدق آخر (مع سمعة وتوزيع موجودان مسبقًا) يوقع على شهادة GeoTrust root CA أن يثق بها العميل بشكل صريح.

عندما تقدم Google الإصدار الموقعة عبر GeoTrust root CA cert ، فإن العميل الذي لا يثق في الأصل يمكنه فقط استخدام شهادة Equifax CA للتحقق من GeoTrust - لذا فإن Equifax يعمل كنوع من مرساة الثقة "القديمة".

واجهت مشكلة مماثلة مع fetchmail عندما قمت بتمكين التحقق من SSL pop.gmail.com.

لقد قمت بتنزيل ملف Equifax pem ولكنه لم يعمل كما هو ، وكان لا بد من تشغيله c_rehash ssl/certsمما أدى إلى إنشاء ارتباط رمزي بقيمة التجزئة ، ثم نجح بعد ذلك.

بدلاً من ذلك ، يمكن أيضًا معرفة قيمة التجزئة عن طريق تشغيل ...

openssl x509 -in Equifax_Secure_Certificate_Authority.pem -fingerprint -subject -issuer -serial -hash -noout | sed  -n /^[0-9]/p

https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.pem

أثناء إنشاء الشهادات وتكوينها ، يجب على المرء تحديث openssl.cnfالملف أيضًا (Debian - /etc/ssl/openssl.cnf) ، للإشارة إلى المسار الصحيح وأسماء الشهادات وما إلى ذلك ، ثم يمكنك تشغيل الأمر والتحقق منها بدون -CApathخيار.

وبناءً على ذلك ، يمكن للمضيفين البعيدين أيضًا التحقق من شهاداتك بشكل صحيح في هذه الحالة.

هذا هو openssl.cnfالقسم المناسب :

####################################################################
[ ca ]

default_ca  = CA_default        # The default ca section

####################################################################
[ CA_default ]

dir     = /etc/ssl