شهادات SSL مختلطة منذ الترقية

كان لدي (وكان لدي!) تثبيت وكيل عكسي يعمل افتراضيًا.
تم تقديم كل شيء بواسطة HTTPS كما هو مصمم.

لقد قفزت عدة إصدارات وواجهت ترقية الموت حيث تظل الشاشة فارغة كما هو مذكور هنا: Upgrade discourse doesn't work - #6 by Andrew_Bond

لقد قمت بتحديث Discourse الخاص بي يدويًا باستخدام ./launcher rebuild app وأنا على الإصدار 2.9.0.beta14 (0da79561c3)

لاحظت أنه إذا حاول مسودة الحفظ، أو معظم الإجراءات الأخرى مثل النشر، وتسجيل الدخول، تلقيت خطأ 403 ممنوع (عبر مفتش Chrome)

شعارى يعمل في الزاوية العلوية اليسرى للموقع.

إذا قمت بتعطيل عنصر فرض HTTPS يدويًا عبر سطر الأوامر، يفشل الشعار في التحميل حيث أكون في وضع مختلط حيث يتم حظر عنصر http. تستمر جميع العناصر الأخرى في الموقع في العمل.

لم أقم بأي تغييرات في وكيل Nginx العكسي. لقد حاولت إعادة بناء التطبيق مرة أخرى دون جدوى.

أقترح أن شيئًا ما قد تغير في طريقة عمل Discourse من الإصدارات التي قمت بالترقية منها. كان معرف الإصدار الأخير الذي يمكنني العثور عليه والذي عمل مع خيار فرض HTTPS العامل هو: e9f53dbe0028ca7a5d8926711a1944765d34347

الأخطاء التي تم اكتشافها الآن:

إعجابَين (2)

مرحباً أندرو - شكراً على التقرير. تؤثر هذه المشكلة تحديداً على تكوينات الوكيل العكسي حيث تتم إضافة رؤوس X-Forwarded-Proto متعددة إلى الطلب قبل وصوله إلى حاوية التطبيق.

لقد قمت للتو بدمج إصلاح في main - يجب أن يصل إلى اختبارات ناجحة في حوالي 20 دقيقة

بمجرد ظهوره في اختبارات ناجحة ستحتاج إلى إجراء إعادة بناء كاملة (لا يتم تطبيق تغييرات تكوين nginx أثناء الترقيات المستندة إلى واجهة المستخدم).

8 إعجابات

شكراً جزيلاً على الرد السريع والإصلاح السريع!

إعجاب واحد (1)

إذًا، تحديث.

لقد أعدت بناء التطبيق باستخدام ./launcher rebuild app

لا توجد مشاكل هناك.

اختفت الأخطاء عندما أجبرت HTTPS مع استثناء

لم يعد لدي رفض 403 ولكن على سبيل المثال عند محاولة تسجيل الدخول يتم تقديمي بصندوق تسجيل الدخول الذي يبدو أنه يقبل البيانات ثم يتم تقديمه مرة أخرى بمستخدم غير مسجل الدخول

نفس الخطأ المذكور أعلاه موجود عند إعادة تحميل الصفحة.

لقد قمت مرة أخرى بتعطيل فرض HTTPS ويعمل الموقع - للتوضيح على الرغم من أن الشعارات لا تزال غير معروضة

إعجاب واحد (1)

هذا الخطأ غير ذي صلة - إنه ناتج عن قيام Cloudflare بحقن نصوص تحليلية (وسياسة أمان المحتوى الافتراضية لـ Discourse تمنع الحقن)

هل يمكنك مشاركة المزيد حول الوكلاء لديك بين المستخدمين و Discourse؟ أفترض أن Cloudflare هي الطبقة الأولى؟ ماذا يوجد أيضًا بين Cloudflare وحاوية تطبيق Discourse؟

3 إعجابات

بالتأكيد!
أنت على حق تمامًا. Cloudflare هو أول نتيجة ثم لدينا nginx reverse proxy مقدم من centminmod على docker.

هل يمكنك مشاركة الإعدادات التي لديك لهذا؟ على وجه الخصوص، هل يضيف رأس X-Forwarded-Proto إضافي؟

بالتأكيد!

# دليل البدء السريع لـ Centmin Mod
# يجب قراءة https://centminmod.com/getstarted.html
# لإعداد HTTPS/2 SSL
# اقرأ https://centminmod.com/nginx_configure_https_ssl_spdy.html

# إعادة التوجيه من www إلى غير-www فرض SSL
# قم بإلغاء التعليق، احفظ الملف وأعد تشغيل Nginx لتمكين
# إذا كنت غير متأكد، استخدم return 302 قبل استخدام return 301
 server {
       listen   80;
       server_name exiges.com www.exiges.com;
       return 302 https://$server_name$request_uri;
 }

server {
  listen 443 ssl http2;
  server_name exiges.com www.exiges.com;

  ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
  ssl_certificate      /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
  ssl_certificate_key  /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
  include /usr/local/nginx/conf/ssl_include.conf;

  # شهادة سحب المصدر الموثقة من Cloudflare community.centminmod.com/threads/13847/
  #ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
  #ssl_verify_client on;



  # موزيلا الموصى بها
  ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
  ssl_prefer_server_ciphers   on;
  #add_header Alternate-Protocol  443:npn-spdy/3;

  # قبل تمكين HSTS اقرأ centminmod.com/nginx_domain_dns_setup.html#hsts
  #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
  #spdy_headers_comp 5;
  ssl_buffer_size 1369;
  ssl_session_tickets on;

  # تمكين OCSP stapling
  #resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
  #resolver_timeout 10s;
  #ssl_stapling on;
  #ssl_stapling_verify on;
  #ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;

# ngx_pagespeed و ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/exiges.com/log/error.log;

  include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
  root /home/nginx/domains/exiges.com/public;
  # قم بإلغاء التعليق على تضمين cloudflare.conf إذا كنت تستخدم cloudflare لـ
  # خادم و/أو موقع vhost
  #include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;


location / {
       proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
       proxy_set_header        X-Forwarded-Proto https;
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
   }

  include /usr/local/nginx/conf/php.conf;

  #include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;
}

أرى الإشارة إلى رأس x-proto ..

   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
إعجاب واحد (1)

كيف يتصل Cloudflare بمصدرك؟ هل يستخدم SSL/TLS؟ من المثالي أن تستخدم “Full” أو “Full (Strict)” هنا.

مرن. لقد كنت كسولاً ولم أستخدم شهادات الخادم

أوصي بإعدادك بأحد خيارات Cloudflare SSL الآمنة. “Flexible” يعني أن حركة المرور غير مشفرة بين Cloudflare والخادم الخاص بك.

بالنظر إلى الإعداد مرة أخرى:

يبدو أنك تقوم بتعيين الرأس إلى https، ثم تقوم بتعيينه مرة أخرى بعد سطرين إلى $scheme (والذي سيكون http بناءً على إعداد Cloudflare الخاص بك). إذا قمت بإزالة السطر الثاني، فسيتم إخبار Discourse بأن الاتصال آمن (على الرغم من أنه ليس كذلك).

4 إعجابات

مثير للاهتمام.

ما أجده غريباً مع ذلك هو أنه كان يعمل.

أشك (لكن لم أؤكد بنسبة 100٪) أن حاوية Discourse NGINX كانت تنظر سابقًا إلى رأس X-Forwarded-Proto ‘الأول’. الآن، إنها تنظر إلى رأس X-Forwarded-Proto ‘الأخير’، وهو ما يمكن القول إنه أكثر أمانًا لأنه يأتي من الوكيل ‘الأحدث’ الذي لديه أكبر قدر من المعلومات حول الطلب الوارد.

لذلك، قبل التحديث، كانت تنظر إلى X-Forwarded-Proto الذي قدمته Cloudflare (https). الآن، إنها تنظر إلى رأس X-Forwarded-Proto الذي قدمه تكوين وكيلك العكسي ‘centminmod’ (http).

3 إعجابات

لقد قمت بإزالة proxy_set_header X-Forwarded-Proto $scheme; من التكوين مع تكوين يعمل الآن.

لمن يقرأ هذا ويقوم بتكوين centminmod، هناك تكوينان لـ nginx.

أحدهما لـ http والآخر لـ https.

لقد قمت بإزالة proxy_set_header X-Forwarded-Proto $scheme; الثاني من موقع http، وكل شيء يعمل كما هو متوقع الآن.

هذا هو ملف exiges.com.conf الخاص بي:

# دليل البدء السريع لـ Centmin Mod
# يجب قراءة https://centminmod.com/getstarted.html

# إعادة التوجيه من non-www إلى www
# قم بإلغاء التعليق، احفظ الملف وأعد تشغيل Nginx لتمكين
# إذا كنت غير متأكد، استخدم return 302 قبل استخدام return 301
#server {
#            listen   80;
#            server_name exiges.com;
#            return 301 $scheme://www.exiges.com$request_uri;
#       }

server {
  server_name exiges.com www.exiges.com;
#return 301 https://exiges.com.com$request_uri;
#return 301 $scheme://www.exiges.com$request_uri;

# ngx_pagespeed و ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/exiges.com/log/error.log;

  include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
  root /home/nginx/domains/exiges.com/public;
  # قم بإلغاء التعليق على تضمين cloudflare.conf إذا كنت تستخدم cloudflare لـ
  # الخادم و/أو موقع vhost
  #include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;

  # منع الوصول إلى ./directories والملفات
  #location ~ (?:^|/)\. {
  # deny all;
  #}

  location / {
 proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
		    proxy_set_header        X-Forwarded-Proto https;
                #proxy_set_header Host $http_host;
                proxy_http_version 1.1;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                #proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
  #include /usr/local/nginx/conf/503include-only.conf;

# حظر الاستغلالات الشائعة، حقن SQL، إلخ
#include /usr/local/nginx/conf/block.conf;

  # تمكين قوائم الدلائل عندما لا يتم العثور على ملف الفهرس
  #autoindex  on;

  # عرض أوقات قائمة الملفات بالتوقيت المحلي
  #autoindex_localtime on;

  # مثال على روابط دائمة لـ Wordpress
  #try_files $uri $uri/ /index.php?q=$uri&$args;

  }

  include /usr/local/nginx/conf/php.conf;

  #include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;
}

هذا هو ملف exiges.com.conf.ssl الخاص بي:

# دليل البدء السريع لـ Centmin Mod
# يجب قراءة https://centminmod.com/getstarted.html
# لإعداد HTTP/2 SSL
# قراءة https://centminmod.com/nginx_configure_https_ssl_spdy.html

# إعادة التوجيه من www إلى non-www SSL إجباري
# قم بإلغاء التعليق، احفظ الملف وأعد تشغيل Nginx لتمكين
# إذا كنت غير متأكد، استخدم return 302 قبل استخدام return 301
 server {
       listen   80;
       server_name exiges.com www.exiges.com;
       return 302 https://$server_name$request_uri;
 }

server {
  listen 443 ssl http2;
  server_name exiges.com www.exiges.com;

  ssl_dhparam /usr/local/nginx/conf/ssl/exiges.com/dhparam.pem;
  ssl_certificate      /usr/local/nginx/conf/ssl/exiges.com/exiges.com.crt;
  ssl_certificate_key  /usr/local/nginx/conf/ssl/exiges.com/exiges.com.key;
  include /usr/local/nginx/conf/ssl_include.conf;

  # شهادة سحب المصدر المعتمدة من Cloudflare community.centminmod.com/threads/13847/
  #ssl_client_certificate /usr/local/nginx/conf/ssl/cloudflare/exiges.com/origin.crt;
  #ssl_verify_client on;



  # موصى به من موزيلا
  ssl_ciphers TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
  ssl_prefer_server_ciphers   on;
  #add_header Alternate-Protocol  443:npn-spdy/3;

  # قبل تمكين سطر HSTS اقرأ centminmod.com/nginx_domain_dns_setup.html#hsts
  #add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
  #add_header X-Frame-Options SAMEORIGIN;
  add_header X-Xss-Protection "1; mode=block" always;
  add_header X-Content-Type-Options "nosniff" always;
  #add_header Referrer-Policy "strict-origin-when-cross-origin";
  #add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()";
  #spdy_headers_comp 5;
  ssl_buffer_size 1369;
  ssl_session_tickets on;

  # تمكين ocsp stapling
  #resolver 8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 valid=10m;
  #resolver_timeout 10s;
  #ssl_stapling on;
  #ssl_stapling_verify on;
  #ssl_trusted_certificate /usr/local/nginx/conf/ssl/exiges.com/exiges.com-trusted.crt;

# ngx_pagespeed و ngx_pagespeed handler
#include /usr/local/nginx/conf/pagespeed.conf;
#include /usr/local/nginx/conf/pagespeedhandler.conf;
#include /usr/local/nginx/conf/pagespeedstatslog.conf;

  # limit_conn limit_per_ip 16;
  # ssi  on;

  access_log /home/nginx/domains/exiges.com/log/access.log combined buffer=256k flush=5m;
  error_log /home/nginx/domains/exiges.com/log/error.log;

  include /usr/local/nginx/conf/autoprotect/exiges.com/autoprotect-exiges.com.conf;
  root /home/nginx/domains/exiges.com/public;
  # قم بإلغاء التعليق على تضمين cloudflare.conf إذا كنت تستخدم cloudflare لـ
  # الخادم و/أو موقع vhost
  include /usr/local/nginx/conf/cloudflare.conf;
  include /usr/local/nginx/conf/503include-main.conf;


location / {
       proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
       proxy_set_header        X-Forwarded-Proto https;
       proxy_http_version 1.1;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Real-IP $remote_addr;
   }

  include /usr/local/nginx/conf/php.conf;

  #include /usr/local/nginx/conf/pre-staticfiles-local-exiges.com.conf;
  #include /usr/local/nginx/conf/pre-staticfiles-global.conf;
  #include /usr/local/nginx/conf/staticfiles.conf;
  #include /usr/local/nginx/conf/drop.conf;
  #include /usr/local/nginx/conf/errorpage.conf;
  #include /usr/local/nginx/conf/vts_server.conf;
}

@david نقدر وقتك في إصلاح هذه المشكلة.

بالنسبة لما هو جدير بالذكر، أنا الآن كامل، وليس مرنًا مع الشهادات.

إعجاب واحد (1)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.