یادداشت‌های عمومی من

تلاشی برای مفید‌تر بودن

یادداشت‌های عمومی من

تلاشی برای مفید‌تر بودن

۱ مطلب با کلمه‌ی کلیدی «curl» ثبت شده است

شنبه, ۱۴ دی ۱۳۹۲، ۱۱:۳۶ ق.ظ

مشکل Unknown SSL protocol error برای ایرانی‌ها

به نقل از ویکی‌پدیای فارسی، پروتکل SSL/TLS به برنامه‌های Client/Server اجازه می‌دهد که در شبکه از طریقی که از شنود و جعل پیام جلوگیری می‌کند، با یکدیگر ارتباط برقرار کنند. این پروتکل احراز هویت و ارتباط مطمئن در اینترنت را از طریق استفاده از رمز نگاری فراهم می‌کند.

این پروتکل نسخه‌های متفاوتی دارد. این نسخه‌ها از SSL 1.0 شروع شد تا SSL 3 و بعد شد TLS 1.0 بعد TLS 1.1 و در حال حاضر جدید ترین آن‌ها TLS 1.2 هست. طبیعتا جدید ترین نسخه، بیشترین امنیت را دارد. اما به لطف دست‌کاری‌های دوستان حاکم بر زیرساخت اینترنت ایران، امکان استفاده از هیچ کدام از این نسخه‌ها بجز SSL 3 برای ما ایرانی‌ها فراهم نیست.

برنامه‌ها هم بصورت پیش‌فرض سعی می‌کنند از جدید ترین نسخه که TLS هست استفاده کنند، اما چه می‌دانند که اینجا ایران است :) در نتیجه مثلا وقتی دستور 

curl https://github.com
را اجرا می‌کنیم با خطای زیر مواجه می‌شویم:
curl: (35) Unknown SSL protocol error in connection to github.com:443 
خیلی از برنامه‌ها از جمله git و yaourt برای برقراری ارتباط خود از کتابخانه‌ی curl استفاده می‌کنند. در نتیجه حتما کاربران ایرانی این برنامه‌ها هم با این مشکل مواجه شده اند.
خب دو راه حل داریم، یا اینجا ایران نباشد (استفاده از پراکسی) و یا به curl بگیم که [عمو جون دلت خوشه‌ها،] اینجا ایرانه :) و از TLS استفاده نکند. کاربران آرچ‌لینوکس می‌تونن پکیج curl-git-with-tls-disabled را از aur نصب کنند. این پکیج، همان پکیج curl-git هست که یک patch به آن اضافه شده تا TLS را غیر فعال کند و مشکل حل می‌شود.
کاربران سایر سیستم عامل‌ها هم باید سورس curl را دانلود کنند و patch زیر را روی آن اعمال کنند و خودشان کامپایل و نصب کنند. اگر یک نفر پکیج دبیان هم بسازد که خیرش به بقیه می‌رسد :)
---
lib/vtls/openssl.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/lib/vtls/openssl.c b/lib/vtls/openssl.c
index 7a21c73..c44f773 100644
--- a/lib/vtls/openssl.c
+++ b/lib/vtls/openssl.c
@@ -1552,6 +1552,7 @@ ossl_connect_step1(struct connectdata *conn,
switch(data->set.ssl.version) {
case CURL_SSLVERSION_DEFAULT:
ctx_options |= SSL_OP_NO_SSLv2;
+ ctx_options |= SSL_OP_NO_TLSv1; /* Disable TLS */
#ifdef USE_TLS_SRP
if(data->set.ssl.authtype == CURL_TLSAUTH_SRP) {
infof(data, "Set version TLSv1.x for SRP authorisation\n");
---

۱ نظر ۱۴ دی ۹۲ ، ۱۱:۳۶
محمد حسین سخاوت