‫۴۰۰ درخواست بد - خطای گواهینامه SSL

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

نشانه

برنامه کارخواه پاسخ HTTP 400 - درخواست بد را با پیام «خطای گواهینامه SSL» دریافت می‌کند. این خطا معمولاً توسط «مسیریاب لبه» در راه‌اندازی «امنیت لایه انتقال» دوطرفه که برای اتصال ورودی به 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>

علل احتمالی

دلایل احتمالی این مشکل به شرح زیر است:

علت شرح دستورالعمل‌های عیب‌یابی برای
گواهینامه کارخواه منقضی‌شده گواهینامه ارسال‌شده توسط کارخواه منقضی شده است. کاربران «ابر خصوصی» و «ابر عمومی» لبه
گواهینامه نادرست ارسال‌شده توسط کارخواه اگر گواهینامه ارسال‌شده توسط برنامه مشتری با گواهینامه ذخیره‌شده در truststore «مسیریاب» Edge مطابقت نداشته باشد، این خطا ایجاد می‌شود. کاربران «ابر خصوصی» و «ابر عمومی» لبه
گواهینامه ریشه مشتری در «مخزن اعتماد» وجود ندارد اگر گواهینامه ریشه امضاشده توسط «مرجع صدور گواهی» مشتری در truststore روتر Edge وجود نداشته باشد، این خطا ایجاد می‌شود. کاربران «ابر خصوصی» و «ابر عمومی» لبه
«گواهینامه‌های کارخواه» در «مسیریاب لبه» بار نشد اگر گواهینامه‌های کارخواه بارگذاری‌شده در مخزن اعتماد در «مسیریاب» بار نشود، این خطا ایجاد می‌شود. کاربران Edge Private Cloud

دلیل: گواهینامه کارخواه منقضی‌شده

این مشکل معمولاً برای امنیت لایه انتقال دوطرفه زمانی رخ می‌دهد که گواهینامه ارسال‌شده توسط کارخواه منقضی شده باشد. در «امنیت لایه انتقال» دوطرفه، هم کارخواه و هم سرور گواهینامه‌های عمومی خود را برای انجام دست دادن مبادله می‌کنند. کارخواه گواهینامه سرور را اعتبارسنجی می‌کند و سرور گواهینامه کارخواه را اعتبارسنجی می‌کند.

در Edge، «امنیت لایه انتقال دوطرفه» در میزبان مجازی پیاده‌سازی می‌شود، جایی که گواهینامه سرور به «انبار کلید» اضافه می‌شود و گواهینامه کارخواه به انبار اعتماد اضافه می‌شود.

درطول دست دادن 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. مرجع «مخزن مطمئن» استفاده‌شده در «میزبان مجازی» را تعیین کنید. در مثال بالا، نام مرجع «مخزن امین» myTruststoreRef است.

  3. «مخزن مطمئن» اشاره‌شده توسط مرجع «مخزن مطمئن» را تعیین کنید.
    1. در «واسط کاربر Edge» به Admin (سرپرست) > Environments (محیط‌ها) > References (مرجع‌ها) پیمایش کنید و نام مرجع Truststore را جستجو کنید.
    2. نام موجود در ستون مرجع را برای مرجع «مخزن مطمئن» خاص یادداشت کنید. این نام Truststore شما خواهد بود.

      میانای کاربری Edge که فهرستی از
                                                             مرجع‌ها را نشان می‌دهد
      شکل ۱

      در مثال بالا، توجه کنید که myTruststoreRef مرجع به myTruststore دارد. بنابراین، نام Truststore‏ myTruststore است.

  4. در Admin > Environments > TLS Keystores (سرپرست > محیط‌ها > مخزن کلیدهای TLS) در «میانای کاربری Edge»، به TLS Keystores (مخزن کلیدهای TLS) پیمایش کنید و Truststore (مخزن اعتماد) را که در مرحله ۳ پیدا کردید پیدا کنید.
  5. گواهینامه را در «مخزن مطمئن» خاص (که در مرحله ۳ بالا تعیین شده است) انتخاب کنید، همان‌طور که در زیر نشان داده شده است:

    شکل ۲

    گواهینامه با نام مستعار client-cert-markw در مثال بالا نشان می‌دهد که منقضی شده است.

  6. بررسی کنید که گواهینامه نام مستعار گواهینامه برای مخزن اعتماد منقضی شده است یا نه.
  7. اگر گواهینامه منقضی نشده است، به مراحل تشخیص متداول برای سایر دلایل بروید.

وضوح

گواهینامه جدیدی تهیه کنید و گواهینامه را بارگذاری کنید:

  1. یک فروشگاه امین جدید ایجاد کنید، برای مثال myNewTruststore.
  2. گواهینامه جدید را در مخزن اعتماد تازه ایجادشده بارگذاری کنید.
  3. مرجع trustore مورداستفاده در «میزبان مجازی» خاص را تغییر دهید تا بااستفاده از مراحل ارائه‌شده در اصلاح مرجع به trustore جدید اشاره کند.

    در مثال شرح‌داده‌شده در بالا، مرجع 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. «بسته شماره ۳۰» در tcpdump (تصویر زیر) نشان می‌دهد که «برنامه کارخواه» (مبدأ) پیام «سلام کارخواه» را به «مسیریاب» (مقصد) ارسال کرده است.
  2. بسته شماره ۳۴ نشان می‌دهد که «مسیریاب» پیام «سلام مشتری» را از برنامه مشتری تأیید می‌کند.
  3. «مسیریاب» «سلام سرور» را در بسته شماره ۳۵ ارسال می‌کند و سپس گواهینامه‌اش را ارسال می‌کند و همچنین از برنامه کارخواه می‌خواهد گواهینامه‌اش را در بسته شماره ۳۸ ارسال کند.
  4. در بسته شماره ۳۸، که در آن «مسیریاب» بسته «درخواست گواهینامه» را ارسال می‌کند، بخش «نام‌های متمایز» را بررسی کنید که جزئیات مربوط به گواهینامه کارخواه، زنجیره آن، و مجوزهای گواهینامه‌ای را که «مسیریاب» (کارساز) می‌پذیرد ارائه می‌دهد.
  5. شکل ۳
  6. برنامه مشتری گواهی خود را در «بسته شماره ۴۱» ارسال می‌کند. بخش گواهینامه درستی‌سنجی را در بسته شماره ۴۱ بررسی کنید و گواهینامه‌ای را که برنامه مشتری ارسال می‌کند تعیین کنید.

    شکل ۴
  7. بررسی کنید که آیا موضوع و صادرکننده گواهینامه و زنجیره آن که توسط برنامه مشتری ارسال شده است (بسته شماره ۴۱) با گواهینامه پذیرفته‌شده و زنجیره آن از «مسیریاب» (بسته شماره ۳۸) مطابقت دارد یا خیر. اگر عدم تطابقی وجود داشته باشد، دلیل این خطا همین است. بنابراین، «مسیریاب» (سرور) «هشدار رمزگذاری‌شده» (بسته شماره ۵۷) و سپس FIN، ACK (بسته شماره ۵۸) را به «برنامه مشتری» ارسال می‌کند و درنهایت اتصال قطع می‌شود.
  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. مرجع «مخزن مطمئن» استفاده‌شده در «میزبان مجازی» را تعیین کنید.

    در مثال بالا، نام مرجع «مخزن مطمئن» myCompanyTruststoreRef است.

  3. «مخزن مطمئن» اشاره‌شده توسط مرجع «مخزن مطمئن» را تعیین کنید.
    1. در «واسط کاربر Edge» به Admin > Environments References (سرپرست > مرجع‌های محیط) پیمایش کنید و نام مرجع Truststore را جستجو کنید.
    2. نام موجود در ستون مرجع را برای مرجع «مخزن مطمئن» خاص یادداشت کنید. این نام Truststore شما خواهد بود.

      میانای کاربری Edge که
        مرجع مخزن مطمئن را نشان می‌دهد.
      شکل ۵

      در مثال بالا، توجه کنید که myCompanyTruststoreRef به myCompanyTruststore ارجاع می‌دهد. بنابراین، نام Truststore عبارت است از myCompanyTruststore.

  4. گواهینامه‌های ذخیره‌شده در «مخزن مطمئن» (تعیین‌شده در مرحله قبلی) را بااستفاده از میاناهای برنامه‌سازی کاربردی زیر دریافت کنید:
    1. فهرست گواهینامه‌های میانای برنامه‌سازی کاربردی keystore یا truststore.

      این «میانای برنامه‌سازی کاربردی» همه گواهینامه‌ها را در «مخزن اعتماد» خاص فهرست می‌کند.

    2. جزئیات گواهینامه را از میانای برنامه‌سازی کاربردی keystore یا truststore دریافت کنید.

      این «میانای برنامه‌سازی کاربردی» اطلاعات مربوط به گواهینامه خاصی را در «مخزن اعتماد» خاصی برمی‌گرداند.

  5. بررسی کنید که آیا صادرکننده و موضوع هر گواهینامه و زنجیره آن که در myCompanyTruststore ذخیره شده است با صادرکننده و موضوع گواهینامه و زنجیره آن که در «بسته‌های TCP/IP» (به بسته شماره ۳۸ مراجعه کنید) در بالا دیده می‌شود مطابقت دارد یا نه. اگر عدم تطابقی وجود داشته باشد، نشان می‌دهد که گواهینامه‌های بارگذاری‌شده در مخزن اعتماد در «مسیریاب لبه» بار نمی‌شوند. به دلیل: گواهینامه‌های کارخواه در «مسیریاب لبه» بار نشده است بروید.
  6. اگر در مرحله ۵ عدم تطابقی پیدا نشد، این نشان می‌دهد که برنامه کارخواه «گواهینامه» و زنجیره آن را به‌درستی ارسال نکرده است.

وضوح

مطمئن شوید که برنامه مشتری گواهینامه صحیح و زنجیره آن را به Edge ارسال می‌کند.

دلیل: «گواهی ریشه کارخواه» در «مخزن اعتماد» وجود ندارد

اگر گواهینامه ریشه امضاشده توسط «مرجع صدور گواهی» مشتری در truststore روتر Edge وجود نداشته باشد، این خطا ایجاد می‌شود.

تشخیص

  1. به سیستم Edge UI وارد شوید و پیکربندی میزبان مجازی خاصی را که درخواست میانای برنامه‌سازی کاربردی برای آن انجام می‌شود مشاهده کنید (سرپرست > میزبان‌های مجازی > 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. مرجع فروشگاه مطمئن استفاده‌شده در میزبان مجازی را تعیین کنید. در مثال قبلی، نام مرجع مخزن اعتماد myCompanyTruststoreRef است.
  3. تعیین کنید که مرجع مخزن اطمینان از کدام مخزن اطمینان استفاده می‌کند.
  4. در «واسط کاربر Edge»، به سرپرست > محیط‌ها > مرجع‌ها پیمایش کنید و نام مرجع truststore را جستجو کنید.
  5. نام فروشگاه مطمئن برای مرجع فروشگاه مطمئن خاص در ستون مرجع قرار دارد.

    شکل ۶

    در این مثال، توجه کنید که myCompanyTruststoreRef در ستون «مرجع» myCompanyTruststore را دارد. بنابراین، نام فروشگاه مطمئن myCompanyTruststore است.

  6. بااستفاده از میاناهای برنامه‌سازی کاربردی زیر، گواهینامه‌های ذخیره‌شده در truststore (که در مرحله قبل تعیین شد) را دریافت کنید:
    1. گواهینامه‌های میانای برنامه‌سازی کاربردی keystore یا truststore را فهرست می‌کند. این API همه گواهینامه‌های موجود در truststore را فهرست می‌کند.
    2. جزئیات گواهینامه را از میانای برنامه‌سازی کاربردی keystore یا truststore دریافت کنید. این میانای برنامه‌سازی کاربردی اطلاعات مربوط به گواهینامه خاصی را در مخزن اعتماد برمی‌گرداند.
  7. بررسی کنید که آیا گواهینامه شامل زنجیره کامل، ازجمله گواهینامه ریشه ارسال‌شده توسط مشتری خاص، همان‌گونه که در «بسته‌های TCP/IP» دیده می‌شود، هست یا نه (به شکل ۴ مراجعه کنید). ‫truststore باید شامل گواهینامه ریشه و همچنین گواهینامه برگ سرویس‌گیرنده یا گواهینامه برگ و واسط باشد. اگر گواهینامه ریشه معتبر کارخواه در truststore وجود نداشته باشد، دلیل خطا همین است.

    بااین‌حال، اگر زنجیره گواهینامه کامل کارخواه، ازجمله گواهینامه ریشه، در مخزن اعتماد وجود داشته باشد، نشان می‌دهد که گواهینامه‌های بارگذاری‌شده در مخزن اعتماد احتمالاً در «مسیریاب لبه» بار نشده است. اگر این‌طور است، به علت: گواهینامه‌های مشتری در «رهیاب لبه» بار نشده است مراجعه کنید.

وضوح

مطمئن شوید گواهینامه صحیح مشتری، ازجمله گواهینامه ریشه، در truststore مسیریاب Apigee Edge دردسترس باشد.

علت: گواهینامه‌های کارخواه در «مسیریاب لبه» بار نشده است

  1. اگر کاربر ابر عمومی هستید، با پشتیبانی Apigee Edge تماس بگیرید.
  2. اگر کاربر ابر خصوصی هستید، دستورالعمل‌های زیر را در هر «مسیریاب» دنبال کنید:
    1. بررسی کنید فایل /opt/nginx/conf.d/OrgName_envName_vhostName-client.pem برای میزبان مجازی خاص وجود دارد یا نه. اگر فایل وجود ندارد، به بخش راه‌حل در زیر بروید.
    2. اگر فایل وجود دارد، از فرمان openssl زیر برای دریافت جزئیات گواهینامه‌های موجود در «مسیریاب لبه» استفاده کنید:
      openssl -in <OrgName_envName_vhostName-client.pem> -text -noout
    3. صادرکننده، موضوع، و تاریخ انقضای گواهینامه را بررسی کنید. اگر هریک از این موارد با آنچه در Truststore در «میانای کاربر Edge» یا بااستفاده از میاناهای برنامه‌سازی کاربردی مدیریت مشاهده شده است مطابقت نداشته باشد، این دلیل خطا است.
    4. ممکن است «مسیریاب» گواهینامه‌های بارگذاری‌شده را مجدد بار نکرده باشد.

وضوح

«رهیاب» را بازراه‌اندازی کنید تا مطمئن شوید جدیدترین «گواهینامه‌ها» بااستفاده از مرحله زیر بارگیری می‌شوند:

apigee-service edge-router restart

میاناهای برنامه‌سازی کاربردی را دوباره اجرا کنید و نتایج را بررسی کنید. اگر مشکل ادامه داشت، به جمع‌آوری اطلاعات تشخیص خرابی بروید.

جمع‌آوری اطلاعات تشخیص خرابی

اگر مشکل حتی پس‌از دنبال کردن دستورالعمل‌های بالا برطرف نشد، لطفاً اطلاعات تشخیصی زیر را جمع‌آوری کنید. اطلاعاتی را که جمع‌آوری می‌کنید با پشتیبانی Apigee Edge تماس بگیرید و هم‌رسانی کنید:

  1. اگر کاربر «ابر عمومی» هستید، اطلاعات زیر را ارائه دهید:
    1. Organization Name
    2. نام محیط
    3. نام پراکسی میانای برنامه‌سازی کاربردی
    4. نام میزبان مجازی
    5. نام مستعار میزبان
    6. فرمان curl را برای بازتولید خطا تکمیل کنید
    7. بسته‌های TCP/IP در «برنامه کارخواه» ضبط شده است
  2. اگر کاربر «ابر خصوصی» هستید، اطلاعات زیر را ارائه دهید:
    1. نام میزبان مجازی و تعریف آن بااستفاده از میانای برنامه‌سازی کاربردی دریافت میزبان مجازی
    2. نام مستعار میزبان
    3. پیام خطای کامل مشاهده شد
    4. بسته‌های TCP/IP در «برنامه کارخواه» یا «مسیریاب» ضبط شده است.
    5. برونداد فهرست کردن گواهینامه‌ها از keystore API API و همچنین جزئیات هر «گواهینامه» دریافت‌شده بااستفاده از Get cert details API.
  3. جزئیاتی درباره اینکه کدام بخش‌های این «کتابچه راهنما» را امتحان کرده‌اید و هرگونه اطلاعات آماری دیگری که به ما کمک می‌کند حل این مشکل را تسریع کنیم.