مشکل ارتباط با وب سرویس soap که از سرتیفیکیت self signed استفاده می کند

با سلام و احترام.
ما بابت یک پروژه که قرار بود از روی مرکز تلفن سیموتل به عنوان کلاینت به یک سرور که از webservice soap استفاده می کرد، متصل بشیم، با خطای زیر مواجه می شدیم:

SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘https://exampleurl?wsdl’ : failed to load external entity “https://exampleurl?wsdl

با توجه به اینکه عیب یابی این مشکل، چند هفته طول کشید و زمان زیادی روی این موضوع صرف شد، خواستم تجربه خودم رو با بقیه دوستان درمیان بگذارم تا در صورت بروز مشکل مشابه، کمکی کرده باشم.

خب پس از بررسی ها مشخص شد که این ایراد به خاطر این هست که سرور soap از سرتیفیکیت self signed استفاده می کنه.
اکثر راهکارهایی که در فروم ها ، ارائه شده بود، معطوف به پارامترهای مورد استفاده در php-soap extension برای مدیریت این موضوع بود که پارامترهای زیر، جزء کاملترین راهکارهای ذکر شده بود:
$options = [
‘cache_wsdl’ => WSDL_CACHE_NONE,
‘trace’ => 1,
‘exceptions’ => true,
‘stream_context’ => stream_context_create(
[
‘ssl’ => [
‘verify_peer’ => false,
‘verify_peer_name’ => false,
‘allow_self_signed’ => true
],
‘http’ => [
‘user_agent’ => ‘PHPSoapClient’
]
]
)
];
با تست همه این پارامترها، مشکل ما همچنان بر طرف نشده بود. البته این پارامترها قطعا در موارد زیادی جوابگو خواهند بود و در واقع با این پارامترها ما به php میگیم که اگر سرتیفیکیت طرف مقابل self signed بود ، قبول کنه و همچنین احراز هویت طرف مقابل برای اون اهمیت نداشته باشه.
نکته قابل توجه این بود که این مشکل در لینوکس با php 5.4 و WAMP با php 7.3 مشاهده نمی شد و در دو حالت ذکر شده، بدون مشکل به وب سرویس soap سمت سرور متصل می شد. اما در لینوکس webian 10 buster با php 7.3 این مشکل ایجاد می شد.

در نهایت با بررسی و تحقیقات بیشتر، متوجه شدیم که ایراد پروژه ما به پارامترهای php مربوط نمی شود و به پارامترهای ssl بازمیگردد.
ما فایل:
/etc/ssl/openssl.cnf
رو ویرایش و در این فایل ، مقدار پارامتر CipherString رو از:
DEFAULT@SECLEVEL=2
به:
DEFAULT@SECLEVEL=1
تغییر دادیم.

این تغییر در واقع سطح امنیتی ssl رو پایین تر میاره. با این تغییر ، مشکل ما در اتصال به سرور soap که از self singed certificate استفاده می کرد، برطرف شد.

موفق باشید.

3 Likes

البته از آقای مهندس ایروانی ، مدیر محترم نرم افزار شرکت نسیم ارتباط هم که در طول این مدت بارها مزاحمشون شدیم و ایشون با حوصله و دقت، به ما راهنمایی می دادند، تشکر می کنم.