PHP တွင် stream_socket_enable_crypto function ကိုအသုံးပြုသောအခါတစ်ခါတစ်ရံတွင် "SSL စစ်ဆင်ရေးမအောင်မြင်ပါ" ဟူသောအမှားအယွင်းတစ်ခုကြုံတွေ့ရသည်။ အထူးသဖြင့် SSL / TLS encryption protocol ကိုဖွင့်ထားသည့်အခါဆာဗာနှင့် encrypted connection တစ်ခုတည်ဆောက်ရန်ဤပြ problem နာသည်များသောအားဖြင့်ဖြစ်သည်။ ဤပြ problem နာကိုဖြေရှင်းရန် SSL configuration, လက်မှတ်များနှင့် PHP ပတ်ဝန်းကျင်ကိုအသေးစိတ်ဖြေရှင်းရန်လိုအပ်သည်။ ဤဆောင်းပါးသည် developer များဤပြ problem နာကိုဖြေရှင်းရန်ကူညီရန်ထိရောက်သောဖြေရှင်းနည်းများကိုမိတ်ဆက်ပေးလိမ့်မည်။
stream_socket_enable_crypto သည် PHP မှအသုံးပြုသော function တစ်ခုဖြစ်ပြီးများသောအားဖြင့် stream socket connection များဖြင့်အသုံးပြုသည်။ ဤအမှားသည်အခြေအနေအမျိုးမျိုးတွင်ဖြစ်ပွားနိုင်ပြီးဘုံအကြောင်းပြချက်များမှာ -
မမှန်ကန်သောသို့မဟုတ်သက်တမ်းကုန်ဆုံးလက်မှတ် - SSL လက်မှတ်နှင့်ပြ a နာတစ်ခုရှိပါကဆက်သွယ်မှုသည်ကျရှုံးနိုင်သည်။
OpenSSL Configuration ပြ issue နာ - PHP သည် Encryption စစ်ဆင်ရေးများကိုကိုင်တွယ်ရန် Openssl Extension တွင်မှီခိုသည်။ OpenSSLL ကိုမှန်ကန်စွာပြုပြင်မထားပါက SSL လည်ပတ်မှုပျက်သွားပေမည်။
ဆာဗာပံ့ပိုးမှုပြ issue နာ - ဆာဗာ၏ SSL Configuration သည်သဟဇာတမဖြစ်နိုင်ပေလောသို့မဟုတ်ထောက်ခံသည့် protocol version များသည်ကွဲပြားသည်။
PHP configuration ပြ problem နာ - PHP ၏ Openssll extension ကို enable ည့်သည်ကိုဖွင့ ်. မသင့်လျော်သော configure ကိုဖွင့်ထားခြင်းမရှိပါ။
ပထမ ဦး စွာဆာဗာဘက်မှအသုံးပြုသော SSL လက်မှတ်သည်မှန်ကန်ကြောင်းနှင့် client သည်မှန်ကန်စွာအတည်ပြုနိုင်သည်။ SSL လက်မှတ်၏တရားဝင်မှုကို browser (သို့) command line tool ကို browser (သို့) command line tool ကိုကြည့်ရှုနိုင်သည်။
ဥပမာအားဖြင့်လက်မှတ်ကိုစစ်ဆေးရန် command ကိုသုံးပါ။
<span><span>openssl s_client -connect yourserver.com:443
</span></span>
လက်မှတ်သည်မမှန်ကန်ပါကသက်တမ်းကုန်ဆုံးလျှင်လက်မှတ်ကိုမွမ်းမံရန်ဆာဗာအုပ်ချုပ်ရေးမှူးကိုဆက်သွယ်ပါ။
PHP configuration တွင် OpenssSL extension ကိုဖွင့်ထားကြောင်းသေချာအောင်လုပ်ပါ။ အောက်ပါ configuration ကို php.ini ဖိုင်တွင်စစ်ဆေးပါ။
<span><span><span class="hljs-attr">extension</span></span><span>=openssl
</span></span>
အကယ်. OpenSSLL ကို enable လုပ်ထားတဲ့အတိုင်း,
PHPP ၏ Phpinfo () function ကိုသုံးနိုင်သည်။ အကယ်. ၎င်းကိုမတင်ပါက PHP ကိုပြန်လည်ပေးအပ်ရန်သို့မဟုတ်သင့်လျော်သော openssl library ကို install လုပ်ပါ။
SSL / TLS protocol protocol version Mischatch သည် "SSL စစ်ဆင်ရေးမအောင်မြင်" အမှားအယွင်းများ၏အဓိကအကြောင်းရင်းတစ်ခုဖြစ်သည်။ stream_socket_enable_crypto function တွင် encryption protocol ကို stream_crypto_method_ssv23_clies ကဲ့သို့သော parameters တွေကိုမှတစ်ဆင့်သတ်မှတ်နိုင်သည်။ ပြ issue နာကိုဖြေရှင်းရန် protocol version ကိုပြောင်းလဲရန်ကြိုးစားနိုင်သည်။
<span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_client</span></span><span>(</span><span><span class="hljs-string">"ssl://yourserver.com:443"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stream</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ဆက်သွယ်မှုမအောင်မြင်ပါ: <span class="hljs-subst">$errstr</span></span></span><span> (</span><span><span class="hljs-subst">$errno</span></span><span>)\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-title function_ invoke__">stream_socket_enable_crypto</span></span><span>(</span><span><span class="hljs-variable">$stream</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>, STREAM_CRYPTO_METHOD_TLS_CLIENT);
}
</span></span>
If STREAM_CRYPTO_METHOD_TLS_CLIENT does not work properly, you can try other encryption protocol options such as STREAM_CRYPTO_METHOD_SSLv23_CLIENT or STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT , etc.
တစ်ခါတစ်ရံ PHP configuration သို့မဟုတ် system ပတ် 0 န်းကျင်သည် Openssl ၏အသုံးပြုမှုကိုအကျိုးသက်ရောက်နိုင်သည်။ ဆာဗာ၏ Openssl Libensl စာကြည့်တိုက်နှင့် PHP ဖွဲ့စည်းခြင်းသည်နောက်ဆုံးဗားရှင်းဖြစ်သည်ကိုသေချာအောင်လုပ်ပါ။ Openssl ဗားရှင်းကိုစစ်ဆေးရန်အောက်ပါ command ကိုသင် run နိုင်သည်။
<span><span>openssl version
</span></span>
အကယ်. သင်၏စနစ်သည် Openssll ဗားရှင်းဟောင်းကိုအသုံးပြုပါကနောက်ဆုံးပေါ်ဗားရှင်းသို့မွမ်းမံရန်အကြံပြုသည်။ Openssll ၏အဟောင်းဗားရှင်းများသည်စာဝှက်စနစ်အသစ်များကိုမထောက်ပံ့နိုင်ပါ။
client configuration နှင့်ပြ problem နာမရှိပါကဆာဗာဘက်တွင် SSL configuration ကိုစစ်ဆေးနိုင်သည်။ ဆာဗာတွင်မှန်ကန်သော SSL / TLS protocol protocol version နှင့် encryption algorithm algable လုပ်ထားကြောင်းသေချာပါစေ။ မျက်မှောက်ခေတ်ဆာဗာများစွာသည် SSLV2 နှင့် SSLV3 ကဲ့သို့သော SSL ဗားရှင်း (ဥပမာ SSLV2 နှင့် SSLV3 ကဲ့သို့) ကိုပိတ်ထားသဖြင့်ပါတီနှစ်ခုစလုံး၏သဘောတူညီချက်ဗားရှင်းများသည်တသမတ်တည်းဖြစ်ကြောင်းသေချာစေရန်လိုအပ်သည်။
ဆာဗာသည်လိုအပ်သော SSL / TLS protocol version ကိုထောက်ပံ့သည်ကိုစစ်ဆေးရန်အောက်ပါ command ကိုသုံးပါ။
<span><span>openssl s_client -connect yourserver.com:443 -tls1_2
</span></span>
ပိုမိုကောင်းမွန်သောပြ problems နာများကိုရှာဖွေရန် PHP တွင်အသေးစိတ်အချက်အလက်မှတ်တမ်းများကိုဖွင့်နိုင်သည်။ Error_reporting နှင့် Display_Erues ကို debugging သတင်းအချက်အလက်များကိုဖော်ပြရန်
<span><span><span class="hljs-title function_ invoke__">error_reporting</span></span><span>(E_ALL);
</span><span><span class="hljs-title function_ invoke__">ini_set</span></span><span>(</span><span><span class="hljs-string">'display_errors'</span></span><span>, </span><span><span class="hljs-number">1</span></span><span>);
</span></span>
ထို့အပြင်သင်သည် SSL အခြေအနေကို debug လုပ်ခြင်းနှင့်ထိန်းချုပ်ရန် SSL အခြေအနေရွေးချယ်မှုများကိုသတ်မှတ်ရန် SSL အခြေအနေရွေးချယ်မှုများကို set up လုပ်ရန် Stream_context_Create ကို သုံးနိုင်သည်။
<span><span><span class="hljs-variable">$context</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_context_create</span></span><span>([
</span><span><span class="hljs-string">'ssl'</span></span><span> => [
</span><span><span class="hljs-string">'verify_peer'</span></span><span> => </span><span><span class="hljs-literal">true</span></span><span>,
</span><span><span class="hljs-string">'verify_peer_name'</span></span><span> => </span><span><span class="hljs-literal">true</span></span><span>,
</span><span><span class="hljs-string">'allow_self_signed'</span></span><span> => </span><span><span class="hljs-literal">false</span></span><span>,
</span><span><span class="hljs-string">'cafile'</span></span><span> => </span><span><span class="hljs-string">'/path/to/cacert.pem'</span></span><span>,
]
]);
</span><span><span class="hljs-variable">$stream</span></span><span> = </span><span><span class="hljs-title function_ invoke__">stream_socket_client</span></span><span>(</span><span><span class="hljs-string">"ssl://yourserver.com:443"</span></span><span>, </span><span><span class="hljs-variable">$errno</span></span><span>, </span><span><span class="hljs-variable">$errstr</span></span><span>, </span><span><span class="hljs-number">30</span></span><span>, STREAM_CLIENT_CONNECT, </span><span><span class="hljs-variable">$context</span></span><span>);
</span></span>
အထက်ပါအဆင့်များသည်ပြ issue နာကိုမဖြေရှင်းနိုင်သေးပါက PHP ကိုနောက်ဆုံးပေါ်တည်ငြိမ်သောဗားရှင်းသို့အဆင့်မြှင့်တင်ရန်စဉ်းစားနိုင်သည်။ PHP ဗားရှင်းအဟောင်းများသည်အဆင့်မြှင့်တင်ပြီးနောက်ညှိနှိုင်းနိုင်သည့်သဟဇာတဖြစ်နေသောပြ issues နာများရှိနိုင်သည်။
"SSL စစ်ဆင်ရေးမအောင်မြင်သော" အမှားတစ်ခုကြုံတွေ့ရသည့်အခါ၎င်းသည်များသောအားဖြင့် SSL configuration issue adition ader and certificate ပြ issue နာတစ်ခု, ဤပြ problem နာအတွက်ထိရောက်သောဖြေရှင်းချက်များမှာ -
လက်မှတ်၏တရားဝင်မှုကိုအတည်ပြုပါ။
PHP သည် OpenSSL တိုးချဲ့မှုကိုသေချာအောင်လုပ်ပါ။
မှန်ကန်သောစာဝှက်စနစ် protocol ကို configure ။
PHP နှင့် Openssl ဗားရှင်းများ၏သဟဇာတကိုစစ်ဆေးပါ။
configure နှင့် debug server-side SSL settings ကို။
အထက်ပါနည်းလမ်းများမှတစ်ဆင့် stream_socket_enable_crypto function ၏ပြ problem နာကိုထိထိရောက်ရောက်ဖြေရှင်းနိုင်သဖြင့်စာဝှက်ထားတဲ့ connection ကိုအောင်မြင်စွာတည်ဆောက်နိုင်အောင်လုပ်ပါ။