400 طلب غير صالح - خطأ في شهادة طبقة المقابس الآمنة (SSL)

أنت تعرض مستندات Apigee Edge.
انتقل إلى مستندات Apigee X.
معلومات

المشكلة

يتلقى تطبيق العميل الاستجابة HTTP 400 - طلب سيئ مع "خطأ في شهادة طبقة المقابس الآمنة". يتم إرسال هذا الخطأ عادةً بواسطة جهاز توجيه Edge. يتم تفعيل إعداد بروتوكول أمان طبقة النقل (TLS) ثنائي الاتجاه للاتصال الوارد إلى Apigee Edge.

رسالة الخطأ

يحصل تطبيق العميل على رمز الاستجابة التالي:

HTTP/1.1 400 Bad Request

متبوعة بصفحة خطأ HTML أدناه:

<html>
  <head>
    <title>400 The SSL certificate error</title>
  </head>
  <body bgcolor="white">
    <center> <h1>400 Bad Request</h1>
    </center>
    <center>The SSL certificate error</center>
    <hr>
    <center>nginx</center>
  </body>
</html>

الأسباب المحتملة

في ما يلي الأسباب المحتمَلة لهذه المشكلة:

السبب الوصف تعليمات تحديد المشاكل وحلّها التي تنطبق على
شهادة العميل منتهية الصلاحية انتهت صلاحية الشهادة التي أرسلها العميل. مستخدمو Edge Private وPublic Cloud
تم إرسال شهادة غير صحيحة من قِبل العميل يظهر هذا الخطأ إذا لم تتطابق الشهادة المُرسَلة من تطبيق العميل. مع الشهادة المخزنة في مخزن الثقة في جهاز توجيه Edge. مستخدمو Edge Private وPublic Cloud
عدم توفّر شهادة جذر العميل في Truststore تظهر رسالة الخطأ هذه إذا كانت شهادة الجذر المُوقَّعة من مرجع تصديق (CA) العميل مفقودة في مخزن موثوق به لموجه Edge. مستخدمو Edge Private وPublic Cloud
لم يتم تحميل شهادات العميل في جهاز توجيه Edge يظهر هذا الخطأ إذا لم يتم تحميل شهادات العميل التي تم تحميلها إلى متجر الثقة. على جهاز التوجيه. مستخدمو Edge Private Cloud

السبب: شهادة العميل منتهية الصلاحية

تحدث هذه المشكلة عادةً مع بروتوكول أمان طبقة النقل (TLS) ثنائي الاتجاه، عندما تنتهي صلاحية الشهادة التي أرسلها العميل. عند استخدام بروتوكول أمان طبقة النقل (TLS) ثنائي الاتجاه، يتم دمج كلٍّ من تبادل العميل والخادم شهاداتهم العامة لإنجاز المصافحة. يتحقّق العميل من صحة شهادة الخادم. ويتحقق الخادم من صحة شهادة العميل.

في Edge، يتم تنفيذ بروتوكول أمان طبقة النقل (TLS) ثنائي الاتجاه في المضيف الافتراضي، حيث تُضاف شهادة الخادم إلى ملف تخزين المفاتيح وتضاف شهادة العميل إلى المخازن الموثوق بها.

أثناء تأكيد اتصال بروتوكول أمان طبقة النقل (TLS)، إذا وجدت أن شهادة العميل منتهية الصلاحية، فإنه سيتم إرسال 400 - طلب سيئ مع الرسالة "خطأ في شهادة طبقة المقابس الآمنة".

التشخيص

  1. سجِّل الدخول إلى واجهة مستخدم Edge واطّلِع على إعدادات Virtual Host المحددة (المشرف > المضيفات الافتراضية) التي يتم إرسال طلب واجهة برمجة التطبيقات لها أو استخدام الحصول على واجهة برمجة تطبيقات المضيف الافتراضي للحصول على تعريف المضيف الافتراضي المحدد.

    يبدو عادةً المضيف الظاهري للاتصال ثنائي الاتجاه عبر بروتوكول أمان طبقة النقل (TLS) على النحو التالي:

    <VirtualHost name="myTLSVHost">
        <HostAliases>
            <HostAlias>api.myCompany.com</HostAlias>
        </HostAliases>
        <Port>443</Port>
        <SSLInfo>
            <Enabled>true</Enabled>
            <ClientAuthEnabled>true</ClientAuthEnabled>
            <KeyStore>ref://myKeystoreRef</KeyStore>
            <KeyAlias>myKeyAlias</KeyAlias>
            <TrustStore>ref://myTruststoreRef</TrustStore>
        </SSLInfo>
    </VirtualHost>
    
  2. حدِّد مرجع Truststore المستخدَم في المضيف الافتراضي. في المثال أعلاه، يكون الاسم المرجعي لـ Truststore هو myTruststoreref.

  3. حدِّد Truststore الذي أشار إليه مرجع Truststore.
    1. في واجهة المستخدم Edge، انتقل إلى المشرف > البيئات > المراجع وابحث عن الاسم المرجعي لـ Truststore.
    2. دوِّن الاسم في العمود المرجع الخاص بمرجع Truststore المحدّد. سيكون هذا هو اسم Truststore.

      واجهة مستخدم Edge تعرض قائمة
                                                             المراجع
      الشكل 1

      في المثال أعلاه، لاحِظ أنّ myTruststoreRef يحتوي على المرجع إلى myTruststore. ولذلك، يكون اسم Truststore هو myTruststore.

  4. في قسم المشرف > البيئات > ملفات تخزين مفاتيح بروتوكول أمان طبقة النقل (TLS) في واجهة مستخدم Edge، انتقِل إلى بروتوكول أمان طبقة النقل (TLS) ملفات تخزين المفاتيح وابحث عن Truststore في الخطوة رقم 3.
  5. اختَر الشهادة ضمن Truststore المحدّد (تم تحديده في الخطوة رقم 3 أعلاه) كما هو موضّح أدناه:

    الشكل 2

    توضح الشهادة ذات الاسم المستعار client-cert-markw في المثال أعلاه أنه من منتهي الصلاحية.

  6. تحقق مما إذا كانت صلاحية الشهادة منتهية الصلاحية للاسم المستعار للشهادة في المخزن الموثوق به.
  7. إذا لم تكن الشهادة منتهية الصلاحية، يمكنك الانتقال إلى خطوات التشخيص الشائعة للأسباب الأخرى.

الدقة

شراء شهادة جديدة وتحميل الشهادة:

  1. أنشئ متجرًا جديدًا موثوقًا به، على سبيل المثال myNewTruststore.
  2. حمِّل الشهادة الجديدة إلى Truststore الذي تم إنشاؤه حديثًا.
  3. عدِّل مرجع الثقة المستخدم في المضيف الافتراضي المحدد للتوجيه إلى المضيف الجديد Truststore باستخدام الخطوات الواردة في تعديل مرجع

    في المثال الوارد أعلاه، وجِّه الإشارة myTruststoreref إلى myNewTruststore.

خطوات التشخيص الشائعة للأسباب الأخرى

  1. للتحقيق في هذه المشكلة، سوف تحتاج إلى التقاط حزم TCP/IP باستخدام tcpdump.
    1. إذا كنت أحد مستخدمي السحابة الإلكترونية الخاصة، يمكنك التقاط حزم TCP/IP على تطبيق العميل أو جهاز التوجيه.
    2. إذا كنت أحد مستخدمي السحابة الإلكترونية العامة، يمكنك التقاط حزم TCP/IP في تطبيق العميل.
    3. بمجرد أن تقرر أين تريد التقاط حزم TCP/IP، استخدم ما يلي tcpdump الأمر لالتقاط حزم TCP/IP:

      tcpdump -i any -s 0 host <IP address> -w <File name>

      ملاحظة: إذا كنت تأخذ حزم TCP/IP على جهاز التوجيه، فاستخدم عنوان IP العلني لتطبيق العميل في الأمر tcpdump.

      إذا كنت تأخذ حزم TCP/IP على تطبيق العميل، فاستخدِم إذًا عنوان IP العلني لعنوان اسم المضيف المستخدم في المضيف الافتراضي في الأمر tcpdump.

      راجِع الأداة tcpdump. لمزيد من المعلومات حول هذه الأداة والأنواع الأخرى من هذا الأمر.

  2. تحليل حزم TCP/IP التي تم جمعها باستخدام أداة Wireshark أو أداة مماثلة تعرفها.

وإليك تحليل نموذج بيانات حزم TCP/IP باستخدام أداة Wireshark:

  1. توضح الحزمة رقم 30 في tcpdump (الصورة أدناه) أن تطبيق العميل (المصدر) أرسل رسالة "Client Hello" إلى جهاز التوجيه (الوجهة)
  2. توضح الحزمة رقم 34 أن جهاز التوجيه يتعرف على رسالة Client Hello من تطبيق العميل.
  3. يرسل جهاز التوجيه كلمة "Server Hello" في الحزمة رقم 35 ثم يرسل الشهادة وكذلك يطلب تطبيق العميل إرسال شهادته في الحزمة رقم 38.
  4. في الحزمة رقم 38، حيث يرسل جهاز التوجيه حزمة "طلب الشهادة"، عليك "الأسماء المميزة" قسم يقدم تفاصيل حول شهادة العميل وسلسلتها ومراجع التصديق التي يقبلها جهاز التوجيه (الخادم).
  5. الشكل 3
  6. يرسل تطبيق العميل شهادته في الحزمة رقم 41. تحقَّق من الشهادة تحقَّق من القسم في الحزمة رقم 41 وحدِّد الشهادة التي أرسلها تطبيق العميل.

    الشكل 4
  7. تحقَّق مما إذا كان العميل قد أرسل موضوع الشهادة ومصدرها وسلسلتها. (الحزمة رقم 41) تتطابق مع الشهادة المقبولة وسلسلتها من جهاز التوجيه (الحزمة رقم 38). إذا كان هناك عدم تطابق، فإن ذلك هو سبب هذا الخطأ. ومن هنا يأتي دور الموجه (الخادم) يرسل التنبيه المشفر (الحزمة رقم 57) متبوعًا بـ FIN وACK (الحزمة 58) إلى تطبيق العميل وإنهاء الاتصال في النهاية.
  8. قد يكون عدم تطابق الشهادة مع سلسلتها سببًا في السيناريوهات الموضحة في الأقسام التالية.

السبب: أرسَل العميل شهادة غير صحيحة

يحدث هذا عادةً إذا كان الشخص/المُصدر للشهادة و/أو سلسلتها المرسلة من قبل التطبيق العميل لا يطابق الشهادة و/أو سلسلته المخزنة في المخزن الموثوق بجهاز التوجيه (الخادم).

التشخيص

  1. تسجيل الدخول إلى واجهة مستخدم Edge وعرض إعدادات "المضيف الافتراضي" المحدّدة (المشرف > المضيفات الافتراضية) التي يتم إرسال طلب واجهة برمجة التطبيقات لها أو استخدام الحصول على واجهة برمجة تطبيقات المضيف الافتراضي للحصول على تعريف المضيف الافتراضي المحدد.

    يبدو عادةً المضيف الظاهري للاتصال ثنائي الاتجاه عبر بروتوكول أمان طبقة النقل (TLS) على النحو التالي:

        <VirtualHost name="myTLSVHost">
            <HostAliases>
                <HostAlias>api.myCompany.com</HostAlias>
            </HostAliases>
            <Port>443</Port>
            <SSLInfo>
                <Enabled>true</Enabled>
                <ClientAuthEnabled>true</ClientAuthEnabled>
                <KeyStore>ref://myKeystoreRef</KeyStore>
                <KeyAlias>myKeyAlias</KeyAlias>
                    <TrustStore>ref://myCompanyTruststoreRef</TrustStore>
            </SSLInfo>
        </VirtualHost>
    
  2. حدِّد مرجع Truststore المستخدَم في المضيف الافتراضي.

    في المثال أعلاه، يكون الاسم المرجعي لمنصّة Truststore هو myCompanyTruststoreref.

  3. حدِّد Truststore الذي يشير إليه مرجع Truststore.
    1. في واجهة المستخدم Edge، انتقل إلى المشرف > مراجع البيئات وابحث عن الاسم المرجعي لـ Truststore.
    2. دوِّن الاسم في العمود المرجع الخاص بمرجع Truststore المحدّد. سيكون هذا هو اسم Truststore.

      واجهة مستخدم Edge تظهر
        مرجع Truststore.
      الشكل 5

      في المثال أعلاه، لاحظ أن myCompanyTruststoreRef يحتوي على الإشارة إلى myCompanyTruststore. ولذلك، يكون اسم Truststore هو myCompanyTruststore.

  4. احصل على الشهادات المخزنة في Truststore (تم تحديدها في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
    1. إدراج الشهادات في ملف تخزين المفاتيح أو واجهة برمجة تطبيقات Truststore.

      وتسرد واجهة برمجة التطبيقات هذه جميع الشهادات في متجر Truststore المحدّد.

    2. يمكنك الحصول على تفاصيل الشهادة من ملف تخزين المفاتيح أو واجهة برمجة تطبيقات Truststore.

      تعرض واجهة برمجة التطبيقات هذه معلومات حول شهادة محددة في Truststore المحدد.

  5. تحقَّق مما إذا كان تم تخزين جهة الإصدار وموضوع كل شهادة وسلسلتها في تتطابق myCompanyTruststore مع قيمة الشهادة وسلسلتها على النحو التالي الموجودة في حزم TCP/IP (راجع الحزمة رقم 38) أعلاه. إذا كان هناك عدم تطابق، فإنه يشير إلى أن الشهادات التي تم تحميلها إلى Truststore لا يتم تحميلها في جهاز توجيه Edge. انتقِل إلى السبب: لم يتم تحميل شهادات العميل في جهاز توجيه Edge.
  6. وإذا لم يتم العثور على عدم تطابق في الخطوة رقم 5، فهذا يشير إلى أن تطبيق العميل قد أجرت عدم إرسال الشهادة المناسبة وسلسلتها.

الدقة

تأكد من إرسال الشهادة الصحيحة وسلسلةها من خلال تطبيق العميل إلى Edge.

السبب: عدم توفُّر شهادة جذر العميل في Truststore

تظهر رسالة الخطأ هذه إذا كانت شهادة الجذر المُوقَّعة من مرجع تصديق (CA) العميل مفقودة في مخزن موثوق به لموجه Edge.

التشخيص

  1. سجِّل الدخول إلى واجهة مستخدم Edge واطّلِع على إعدادات المضيف الافتراضي المحدّد التي تظهر لها واجهة برمجة التطبيقات يتم تقديم الطلب (المشرف > المضيفات الافتراضية > virtual_host)، أو استخدم الحصول على واجهة برمجة تطبيقات المضيف الافتراضي للحصول على تعريف للمضيف الظاهري المحدّد.

    يبدو عادةً المضيف الظاهري للاتصال ثنائي الاتجاه عبر بروتوكول أمان طبقة النقل (TLS) على النحو التالي:

        <VirtualHost name="myTLSVHost">
            <HostAliases>
                <HostAlias>api.myCompany.com</HostAlias>
            </HostAliases>
            <Port>443</Port>
            <SSLInfo>
                <Enabled>true</Enabled>
                <ClientAuthEnabled>true</ClientAuthEnabled>
                <KeyStore>ref://myKeystoreRef</KeyStore>
                <KeyAlias>myKeyAlias</KeyAlias>
                <TrustStore>ref://myCompanyTruststoreRef</TrustStore>
            </SSLInfo>
        </VirtualHost>
    
  2. حدِّد مرجع Truststore المستخدَم في المضيف الافتراضي. في المثال السابق، يكون الاسم المرجعي لـ Truststore هو myCompanyTruststoreref.
  3. حدِّد نظام Truststore الفعلي المستخدَم في مرجع Truststore.
  4. في واجهة مستخدم Edge، انتقل إلى المشرف > البيئات > المراجع والبحث للاسم المرجعي لـ Truststore.
  5. يظهر اسم Truststore لمرجع Truststore المحدَّد في عمود المرجع.

    الشكل 6

    في هذا المثال، لاحِظ أنّ myCompanyTruststoreRef يحتوي على myCompanyTruststore في عمود "المرجع". وبالتالي، لا شك في أنّ Truststore هو myCompanyTruststore.

  6. احصل على الشهادات المخزنة في Truststore (يتم تحديدها في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
    1. إدراج الشهادات لواجهة برمجة تطبيقات ملف تخزين المفاتيح أو واجهة برمجة تطبيقات Truststore تسرد واجهة برمجة التطبيقات هذه جميع الشهادات في Truststore.
    2. يمكنك الحصول على تفاصيل الشهادة من ملف تخزين المفاتيح أو واجهة برمجة تطبيقات Truststore. تعرض واجهة برمجة التطبيقات هذه معلومات حول شهادة محددة في المخزن الموثوق.
  7. التحقّق ممّا إذا كانت الشهادة تتضمّن سلسلة كاملة، بما في ذلك شهادة الجذر أرسله العميل المحدد كما هو موضح في حزم TCP/IP (انظر الشكل 4). Truststore أن تتضمّن شهادة الجذر إلى جانب شهادة ورقة البيانات أو ورقة الشجر للعميل شهادة متوسطة. في حال عدم توفّر شهادة الجذر الصالحة للعميل في Truststore، فهي سبب الخطأ.

    ومع ذلك، إذا كانت سلسلة الشهادات الكاملة للعميل، بما في ذلك شهادة الجذر، في Truststore، فإنها تشير إلى أن الشهادات التي تم تحميلها إلى قد لا يتم تحميل Truststore في جهاز توجيه Edge. إذا كان الأمر كذلك، فراجع السبب: لم يتم تحميل شهادات العميل في جهاز توجيه Edge.

الدقة

تأكَّد من توفُّر شهادة العميل الصحيحة، بما في ذلك شهادة الجذر. في المخزن الموثوق بجهاز التوجيه Apigee Edge.

السبب: لم يتم تحميل شهادات العميل في جهاز توجيه Edge

  1. إذا كنت أحد مستخدمي Public Cloud، يُرجى التواصل مع Apigee Edge Support.
  2. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يُرجى اتّباع التعليمات التالية على كل جهاز توجيه:
    1. التحقق من توفُّر الملف "/opt/nginx/conf.d/OrgName_envName_vhostName-client.pem" للمضيف الظاهري المحدد. إذا لم يكن الملف موجودًا، فانتقل إلى يمكنك الاطّلاع على قسم الحل أدناه.
    2. إذا كان الملف متوفّرًا، استخدِم الأمر openssl أدناه للحصول على تفاصيل الشهادات المتوفرة على جهاز توجيه Edge:
      openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
    3. تحقَّق من جهة إصدار الشهادة وموضوعها وتاريخ انتهاء صلاحيتها. إذا كان أي منها لا يتطابق مع ما تم رصده في Truststore ضمن واجهة مستخدم Edge أو باستخدام واجهات برمجة تطبيقات الإدارة، سبب الخطأ.
    4. من المحتمل أنّ جهاز التوجيه لم يعيد تحميل الشهادات التي تم تحميلها.

الدقة

يُرجى إعادة تشغيل جهاز التوجيه للتأكّد من تحميل أحدث الشهادات باستخدام الخطوة التالية:

apigee-service edge-router restart

أعِد تشغيل واجهات برمجة التطبيقات واطّلِع على النتائج. إذا استمرت المشكلة، فانتقل إلى جمع معلومات التشخيص:

جمع معلومات التشخيص

في حال استمرار المشكلة حتى بعد اتباع التعليمات أعلاه، يُرجى جمع معلومات التشخيص التالية. يمكنك التواصل مع Apigee Edge Support ومشاركة المعلومات التي تجمعها:

  1. إذا كنت تستخدم Public Cloud، يُرجى تقديم المعلومات التالية:
    1. اسم المؤسسة
    2. اسم البيئة
    3. اسم الخادم الوكيل لواجهة برمجة التطبيقات
    4. اسم المضيف الافتراضي
    5. الاسم المستعار للمضيف
    6. أكمِل أمر curl لإعادة إنتاج الخطأ.
    7. حزم TCP/IP التي تم التقاطها في تطبيق العميل
  2. إذا كنت من مستخدمي سحابة خاصة، قدِّم المعلومات التالية:
    1. اسم المضيف الافتراضي وتعريفه باستخدام الحصول على واجهة برمجة تطبيقات المضيف الافتراضي
    2. الاسم المستعار للمضيف
    3. تم ملاحظة رسالة خطأ كاملة
    4. حزم TCP/IP التي تم التقاطها في تطبيق العميل أو جهاز التوجيه.
    5. ناتج سرد الشهادات من واجهة برمجة تطبيقات ملف تخزين المفاتيح واجهة برمجة التطبيقات وكذلك تفاصيل كل شهادة تم الحصول عليها باستخدام Get cert details API.
  3. تفاصيل حول الأقسام التي جربتها في هذا الدليل وأي رؤى أخرى من شأنها لمساعدتنا في إيجاد حل سريع لهذه المشكلة.