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

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

المشكلة

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

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

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

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

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

التشخيص

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

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

    <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. حدِّد مرجع مخزن شهادات الجذر الموثوق بها المستخدَم في المضيف الظاهري. في المثال أعلاه، اسم مرجع مخزن شهادات الجذر الموثوق بها هو myTruststoreRef.

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

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

      في المثال أعلاه، لاحظ أنّ myTruststoreRef يشير إلى myTruststore. وبالتالي، اسم مخزن شهادات الجذر الموثوق بها هو myTruststore.

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

    الشكل 2

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

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

الدقة

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

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

    في المثال الموضّح أعلاه، أشِر إلى المرجع 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 tool أو أداة مشابهة على دراية بها.

في ما يلي تحليل لبيانات حِزم 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 واطّلِع على إعدادات المضيف الظاهري المحدّد (المشرف > المضيفون الظاهريون) الذي يتم إرسال طلب بيانات من واجهة برمجة التطبيقات إليه، أو استخدِم Get virtual host API Management API للحصول على تعريف المضيف الظاهري المحدّد.

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

        <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. حدِّد مرجع مخزن شهادات الجذر الموثوق بها المستخدَم في المضيف الظاهري.

    في المثال أعلاه، اسم مرجع مخزن شهادات الجذر الموثوق بها هو myCompanyTruststoreRef.

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

      تعرض واجهة مستخدم Edge مرجعًا إلى مستودع الثقة.
      الشكل 5

      في المثال أعلاه، لاحظ أنّ myCompanyTruststoreRef يشير إلى myCompanyTruststore. وبالتالي، اسم مخزن شهادات الجذر الموثوق بها هو myCompanyTruststore.

  4. احصل على الشهادات المخزّنة في مخزن شهادات الجذر الموثوق بها (الذي تم تحديده في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
    1. واجهة برمجة التطبيقات List certificates for a keystore or truststore.

      تعرض واجهة برمجة التطبيقات هذه جميع الشهادات في مخزن شهادات الجذر الموثوق بها المحدّد.

    2. واجهة برمجة التطبيقات Get cert details from a keystore or truststore.

      تعرض واجهة برمجة التطبيقات هذه معلومات عن شهادة معيّنة في مخزن شهادات الجذر الموثوق بها المحدّد.

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

الدقة

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

السبب: عدم توفّر شهادة الجذر الخاصة بالعميل في مخزن شهادات الجذر الموثوق بها

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

التشخيص

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

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

        <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. حدِّد مرجع مخزن شهادات الجذر الموثوق بها المستخدَم في المضيف الظاهري. في المثال السابق، اسم مرجع مخزن شهادات الجذر الموثوق بها هو myCompanyTruststoreRef.
  3. حدِّد مخزن شهادات الجذر الموثوق بها الفعلي الذي يستخدمه مرجع مخزن شهادات الجذر الموثوق بها.
  4. في واجهة مستخدم Edge، انتقِل إلى المشرف > البيئات > المراجع وابحَث عن اسم مرجع مخزن شهادات الجذر الموثوق بها.
  5. اسم مخزن شهادات الجذر الموثوق بها لمرجع مخزن شهادات الجذر الموثوق بها المحدّد موجود في المرجع عمود.

    الشكل 6

    في هذا المثال، لاحظ أنّ myCompanyTruststoreRef يحتوي على myCompanyTruststore في عمود المرجع. وبالتالي، اسم مخزن شهادات الجذر الموثوق بها هو myCompanyTruststore.

  6. احصل على الشهادات المخزّنة في مخزن شهادات الجذر الموثوق بها (الذي تم تحديده في الخطوة السابقة) باستخدام واجهات برمجة التطبيقات التالية:
    1. واجهة برمجة التطبيقات List certificates for a keystore or truststore. تعرض واجهة برمجة التطبيقات هذه جميع الـ شهادات في مخزن شهادات الجذر الموثوق بها.
    2. واجهة برمجة التطبيقات Get cert details from a keystore or truststore. تعرض واجهة برمجة التطبيقات هذه معلومات عن شهادة معيّنة في مخزن شهادات الجذر الموثوق بها.
  7. تحقَّق مما إذا كانت الشهادة تتضمّن سلسلة كاملة، بما في ذلك شهادة الجذر التي أرسلها العميل المحدّد كما هو موضّح في حِزم TCP/IP (راجِع الشكل 4). يجب أن يتضمّن مخزن شهادات الجذر الموثوق بها شهادة الجذر بالإضافة إلى شهادة العميل النهائية أو الشهادة النهائية و الشهادة الوسيطة. إذا لم تكن شهادة الجذر الصالحة للعميل متوفّرة في مخزن شهادات الجذر الموثوق بها، فهذا هو سبب الخطأ.

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

الدقة

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

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

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

الدقة

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

apigee-service edge-router restart

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

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

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

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