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

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

المشكلة

يتلقى تطبيق العميل استجابة HTTP 400 - طلب غير صالح مع الرسالة "خطأ في شهادة SSL". يتم إرسال هذا الخطأ عادةً من خلال جهاز توجيه 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 الخاص والعام على Cloud
أرسل العميل شهادة غير صحيحة يظهر هذا الخطأ إذا لم تتطابق الشهادة التي أرسلها تطبيق العميل مع الشهادة المخزّنة في Truststore لجهاز توجيه Edge. مستخدمو Edge الخاص والعام على Cloud
شهادة جذر العميل غير موجودة في Truststore يظهر هذا الخطأ إذا كانت شهادة الجذر الموقَّعة من مرجع تصديق العميل غير متوفّرة في Truststore لجهاز توجيه Edge. مستخدمو Edge الخاص والعام على Cloud
عدم تحميل شهادات العميل في جهاز توجيه Edge يظهر هذا الخطأ إذا لم يتم تحميل شهادات العميل التي تم تحميلها إلى Truststore على جهاز التوجيه. مستخدمو Edge Private Cloud

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

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

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

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

التشخيص

  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://myTruststoreRef</TrustStore>
        </SSLInfo>
    </VirtualHost>
    
  2. تحديد مرجع Truststore المُستخدَم في المضيف الافتراضي في المثال أعلاه، يكون اسم مرجع Truststore هو myTruststoreRef.

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

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

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

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

    الشكل 2

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

  6. تحقَّق مما إذا كانت صلاحية الشهادة للاسم المستعار للشهادة الخاصة بمتجرك على Truststore.
  7. وإذا لم تكن الشهادة منتهية الصلاحية، انتقِل إلى خطوات التشخيص الشائعة للأسباب الأخرى.

درجة الدقّة

احصل على شهادة جديدة وحمّل الشهادة:

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

    في المثال الموضّح أعلاه، وجِّه المرجع myTruststoreRef إلى myNewTruststore.

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

  1. للتحقيق في هذه المشكلة، عليك التقاط حزم TCP/IP باستخدام أداة tcpdump.
    1. إذا كنت من مستخدمي السحابة الإلكترونية الخاصة، يمكنك عندئذٍ التقاط حزم TCP/IP على تطبيق العميل أو جهاز التوجيه.
    2. إذا كنت من مستخدمي Public Cloud، ننصحك بالتقاط حزم 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. قد يرجع عدم تطابق الشهادة وسلسلتها إلى الحالات الموضحة في الأقسام التالية.

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

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

التشخيص

  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 Router. انتقِل إلى السبب: لم يتم تحميل شهادات العميل في جهاز توجيه Edge.
  6. إذا لم يتم العثور على أي تطابق في الخطوة رقم 5، هذا يعني أن تطبيق العميل لم يرسل الشهادة الصحيحة وسلسلة البيانات المرتبطة بها.

درجة الدقّة

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

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

يظهر هذا الخطأ إذا كانت شهادة الجذر الموقَّعة من مرجع تصديق العميل غير متوفّرة في Truststore لجهاز توجيه 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 في عمود Reference (المرجع).

    الشكل 6

    في هذا المثال، لاحِظ أنّ السمة myCompanyTruststoreRef تتضمّن myCompanyTruststore في العمود "Reference". وبالتالي، يكون اسم متجر الثقة هو myCompanyTruststore.

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

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

درجة الدقّة

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

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

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

درجة الدقّة

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

apigee-service edge-router restart

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

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

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

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