मैं php में लागू साबुन सर्वर पर साबुन अनुरोध के लिए हस्ताक्षर सत्यापित करना चाहता हूं।डब्ल्यूएस * सर्वर कार्यान्वयन में हस्ताक्षर की जांच
सर्वर कोड:
$Server = new SoapServer();
$d = new DOMDocument();
$d->load('php://input');
$s = new WSSESoapServer($d);
try {
if($s->process()) {
// Valid signature
$Server->handle($s->saveXML());
} else {
throw new Exception('Invalid signature');
}
} catch (Exception $e) {
echo "server exception: " . $e;
}
त्रुटि:
exception 'Exception' with message 'Error loading key to handle Signature' in /<path>/wse/src/WSSESoapServer.php:146
मैं इस लाइब्रेरी का उपयोग कर सोप अनुरोध पर हस्ताक्षर करने के एक ग्राहक को लागू किया है: https://github.com/robrichards/wse-php। सर्वर को कार्यान्वित करने के तरीके के कोई उदाहरण नहीं हैं ...
हस्ताक्षर की जांच करने के लिए मैं सार्वजनिक कुंजी कैसे लोड करूं?
[संपादित करें] मैं अब
$key = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'public'));
$key->loadKey(CERT, true);
जब हस्ताक्षर मान्य मैं अब एक त्रुटि संदेश मिल रहा है का उपयोग कर आपूर्ति की कुंजी लोड करने में सक्षम है:
$x = new XMLSecurityDSig();
$d = $x->locateSignature($soapDoc);
$valid = $x->verify($key);
हालांकि, मान्य $ हमेशा झूठा है। मुझे नहीं पता कि ऐसा इसलिए है क्योंकि कुंजी गलत है या वास्तव में अमान्य है। मुझे PHP के साथ एक SOAP सर्वर को लागू करने पर बहुत कम जानकारी मिल सकती है और एक SOAP सर्वर को लागू करने पर कोई जानकारी नहीं है जो हस्ताक्षरित अनुरोध की जांच करने पर निर्भर करता है।
स्पष्टीकरण
एक दूरस्थ वेब सेवा से मेरे क्लाइंट बात करती है और एक रसीद हो जाता है।
फिर दूरस्थ सर्वर को मेरे अनुरोध को संसाधित करने में कुछ समय लगता है।
एक दूरस्थ ग्राहक (जिसका मेरा कोई नियंत्रण नहीं है) तो मेरी सेवा का अनुरोध करता है।
अंतिम चरण जहां मैं मुसीबत हस्ताक्षर
ऐसा लगता है कि WSSESoapServer स्वचालित रूप से एक साबुन संदेश के भीतर हस्ताक्षर का पता लगा रहा है और मान्य कर रहा है। तो आपका पहला दृष्टिकोण ठीक होना चाहिए, आपको मैन्युअल रूप से कुंजी लोड करने या सत्यापित करने की आवश्यकता नहीं है। लेकिन: WSSESoapServer की आवश्यकता है कि हस्ताक्षरित साबुन संदेश में हस्ताक्षर सत्यापित करने के लिए हस्ताक्षर और सार्वजनिक कुंजी शामिल है। – smat88dd
क्या आप अभी भी किसी समाधान पर रूचि रखते हैं या आप इसे स्वयं ठीक कर सकते हैं? मैंने एक परीक्षण क्लाइंट और सर्वर स्थापित किया है, और इसे उत्तर के रूप में पोस्ट कर सकता हूं! वैसे भी, मैं इसे चलाने के लिए मिल सकता है, wsse सर्वर त्रुटि के बिना हस्ताक्षर मान्य कर रहा है। – smat88dd
@ smat88dd मुझे लगता है कि मेरा आखिरी संपादन हस्ताक्षर लोड करके इसे ठीक करता है। मेरा अनुरोध करने वाले क्लाइंट पर मेरा कोई नियंत्रण नहीं है।मुझे लगता है कि मेरे पास सार्वजनिक कुंजी अमान्य हो सकती है क्योंकि यह हमेशा झूठी मूल्यांकन करती है। यदि आपका समाधान मेरा से अलग है, तो भी मैं इसे देखना चाहूंगा। अगर केवल * कुछ * दस्तावेज संदर्भित करने के लिए है। – soulfreshner