أحاول الاتصال بخدمة https REST خارجية على heroku من مضيفي المحلي باستخدام الكود التالي:
request(
{
url: config.get('host') +req.originalUrl,
method: req.method,
}, function (error, response, body) {
})
تلقيت الخطأ التالي في رد الاتصال:
لا يتطابق اسم المضيف / IP مع الأسماء البديلة للشهادة: "المضيف: المضيف المحلي. ليس في الأسماء البديلة للشهادة: DNS: _. herokuapp.com ، DNS: herokuapp.com "
المضيف: المضيف المحلي. ليس في الأسماء البديلة للشهادة: DNS: _. herokuapp.com ، DNS: herokuapp.com
إذا قمت بالاتصال بنفس الخدمة المثبتة محليًا ، فكل شيء يعمل بشكل صحيح ، لذلك يجب أن يكون مرتبطًا بـ https.
أي مساعدة؟
ما هو عنوان URL الدقيق لطلبك config.get('host') +req.originalUrl
؟
أنا أحصل على هذا أيضا. أنا أستخدم شهادة موقعة ذاتيًا ولا أرغب في التحقق من اسم المضيف. لدي هذا في طلباتي
agentOptions: {
ca: fs.readFileSync('ca.cert.pem')
}
كيف يمكنك تعيين ignoreHostname؟
هل حاولت ضبط المتغير رفض غير مصرح به على خطأ؟
طلب "" "" ({
url: config.get ('host') + req.originalUrl ،
الطريقة: req.method ،
رفض غير مصرح به: خطأ
} ،
الوظيفة (خطأ ، استجابة ، جسم) {
})```
"" "
سيكون من الرائع أن يكون rejectUnauthorized: false
موجودًا في مستندات الصفحة الأولى في مكان ما.
ألا يجعلك rejectUnauthorized: false
تقبل أي شهادة خادم؟ إذا كان الأمر كذلك ، فأنا لا أعتبره حلاً صالحًا.
أرغب في التحقق من الخادم من خلال التأكد من توقيع الشهادة بواسطة مرجع مصدق موثوق به (في حالتي ، هو المرجع المصدق الخاص بي). لا أريد أن أسكت الأمر برمته وأجعله غير آمن.
هذه الاشياء مروعة
عليك ان تطابق شهادة الخادم CommonName
إلى العميل hostname
.
يجب عليك مطابقة CommonName الخاص بشهادة الخادم مع اسم مضيف العميل.
لماذا هو أن هذه القضية؟ لماذا يهتم العميل باسم مضيفه الموجود في شهادة الخوادم؟ هذا عن مصادقة الخادم. شكرا
لمعلوماتك لقد تلقيت هذا الخطأ أثناء إعادة توجيه الطلبات ، استخدمت request({host: 'something.com'... headers: req.headers...
ما لم أدركه في البداية هو أنه في الرؤوس كان هناك host: 'localhost'
، والذي كان الجاني. لقد قمت باستبداله والآن يتحقق موافق.
أعتقد أنني أعالج نفس المشكلة. تلقيت الخطأ التالي أثناء استخدام العقدة 6.10.3 وطلب 2.88:
خطأ: لا يتطابق اسم المضيف / IP مع الأسماء البديلة للشهادة: "المضيف: https ليس في الأسماء البديلة للشهادة:
لقد تعقبت هذا وصولاً إلى رمز tls.js للعقدة. بطريقة ما ، "https". يتم تمريره باعتباره اسم المضيف عن طريق الطلب وصولاً إلى العقدة. إذا قمت بتعيين رفض غير مصرح به على خطأ ، فسيعمل الكود الخاص بي. لذلك أقوم بتمرير اسم المضيف الصحيح في عنوان URL.
أعتقد أنه يمكن التخفيف من ذلك باستخدام مفتاح api الذي يوفره المجال الهدف.
لمعلوماتك لقد تلقيت هذا الخطأ أثناء إعادة توجيه الطلبات ، استخدمت
request({host: 'something.com'... headers: req.headers...
ما لم أدركه في البداية هو أنه في الرؤوس كان هناكhost: 'localhost'
، والذي كان الجاني. لقد قمت باستبداله والآن يتحقق موافق.
حل مشكلتي. لقد نسيت تعديل req.header وتغيير المضيف.
التعليق الأكثر فائدة
هذه الاشياء مروعة