كنت أحاول استخدام Let's Encrypt مع عدة نطاقات ولكنه لم يعمل لشهادات ECC

كيف يمكنني بدء تجديد الشهادة، هل أقوم ببساطة بحذف القديمة من /shared/ssl؟

أعتقد أنه يفعل ذلك دائمًا عند إعادة البناء، لذلك لا داعي لحذف أي شيء.

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

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

يبدو أن هذا لا يعمل، فأنا لا أحصل على النطاق الثاني الذي تم إدخاله: https://ssl-tools.net/webservers/rpg-foren.com

ولا يبدو أن كل شيء قد تم استبداله بشكل صحيح، حيث يفتقد ملف ecc إلى النطاق الفرعي:

cat /etc/runit/1.d/letsencrypt
#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf

issue_cert() {
  LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d rpg-foren.com -d www.rpg-foren.com --keylength $1 -w /var/www/discourse/public
}

cert_exists() {
  [[ "$(cd /shared/letsencrypt/rpg-foren.com$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")"]]
}

########################################################
# RSA cert
########################################################
issue_cert "4096"

if ! cert_exists ""; then
  # Try to issue the cert again if something goes wrong
  issue_cert "4096" "--force"
fi

LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
  --installcert \
  -d rpg-foren.com \
  -d www.rpg-foren.com --fullchainpath /shared/ssl/rpg-foren.com.cer \
  --keypath /shared/ssl/rpg-foren.com.key \
  --reloadcmd "sv reload nginx"

########################################################
# ECDSA cert
########################################################
issue_cert "ec-256"

if ! cert_exists "_ecc"; then
  # Try to issue the cert again if something goes wrong
  issue_cert "ec-256" "--force"
fi

LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
  --installcert --ecc \
  -d rpg-foren.com \
  --fullchainpath /shared/ssl/rpg-foren.com_ecc.cer \
  --keypath /shared/ssl/rpg-foren.com_ecc.key \
  --reloadcmd "sv reload nginx"

if cert_exists "" || cert_exists "_ecc"; then
  grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"
fi

/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop

لقد قمت للتو بتنفيذ ما يلي يدويًا، والآن الشهادات مناسبة:

/shared/letsencrypt/acme.sh --issue --force -d rpg-foren.com -d www.rpg-foren.com --keylength 4096 -w /var/www/discourse/public --server letsencrypt
/shared/letsencrypt/acme.sh --issue --force -d rpg-foren.com -d www.rpg-foren.com --keylength ec-256 -w /var/www/discourse/public --server letsencrypt

/shared/letsencrypt/acme.sh --installcert -d rpg-foren.com -d www.rpg-foren.com --fullchainpath /shared/ssl/rpg-foren.com.cer --keypath /shared/ssl/rpg-foren.com.key --reloadcmd "sv reload nginx"
/shared/letsencrypt/acme.sh --installcert -d rpg-foren.com -d www.rpg-foren.com --fullchainpath /shared/ssl/rpg-foren.com_ecc.cer --keypath /shared/ssl/rpg-foren.com_ecc.key --reloadcmd "sv reload nginx"

هذه هي إعادة الكتابة الخاصة بي لإعادة التوجيه:

   # tell letsencrypt what additional certs to get
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d www.rpg-foren.com --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d www.rpg-foren.com --fullchainpath"
    - file:
        path: /etc/nginx/conf.d/discourse_redirect.conf
        contents: |
          server {
            listen 80;
            listen 443 ssl;
            server_name www.rpg-foren.com;
            return 301 $scheme://rpg-foren.com$request_uri;

            ssl_protocols TLSv1.2 TLSv1.3;
            ssl_ciphers 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;
            ssl_prefer_server_ciphers off;

            ssl_certificate /shared/ssl/rpg-foren.com.cer;
            ssl_certificate /shared/ssl/rpg-foren.com_ecc.cer;

            ssl_certificate_key /shared/ssl/rpg-foren.com.key;
            ssl_certificate_key /shared/ssl/rpg-foren.com_ecc.key;

            ssl_session_tickets off;
            ssl_session_timeout 1d;
            ssl_session_cache shared:SSL:1m;
          }

هل من الممكن أن يتم تنفيذ أمر استبدال مرة واحدة فقط؟

هل الشهادة صالحة الآن؟

أنا متأكد من أن عمليات إعادة التوجيه تتم معالجتها في مكان آخر في السلسلة ولا تحتاج إلى فعل أي شيء لكي تعمل. أعتقد أنه يجب عليك إزالة هذا الجزء من ملف الـ yml الخاص بك.

يبدو أنها تعمل كما هو متوقع الآن.

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

هل تقصد من النطاق الفرعي www. إلى النطاق الرئيسي؟ على الأقل ليس عبر nginx. لا يوجد عنوان URL محدد هناك بحيث يستجيب خادم الويب لجميع النطاقات الواردة.

.
يعمل معي (انظر أدناه).

أعني أن أي شيء يحل إلى الموقع يعيد التوجيه إلى اسم المضيف. لأي تثبيت قياسي، يمكنك إدخال عنوان IP وسيعيد التوجيه إلى https://hostname. (انظر أدناه)

لقد قمت بإعداد هذا للتو، وإنشاء تثبيت قياسي جديد باستخدام https://dashboard.literatecomputing.com/، ولصق extrahostname.myforum.us إضافيًا في حقل domain2 أعلاه ونسخ ولصق خطاف after_ssl الناتج مباشرة بعد hooks: في web_only.yml (وقمت بذلك أثناء قيام البرنامج النصي ببناء حاوية البيانات، لذلك لم أضطر إلى إعادة البناء بعد انتهائه في المرة الأولى!).

تعمل كل هذه الأمور كما هو متوقع:

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

هل هذا يعني أن النطاق الفرعي مخزن في /etc/runit/1.d/letsencrypt لكل من نص تثبيت rsa و ecc؟
كما ترى أعلاه، لم يقم الخطاف بتخزين سوى النطاق الفرعي في جزء rsa ولكن ليس في جزء ecc.

  --installcert \
  -d rpg-foren.com \
  -d www.rpg-foren.com
  --installcert --ecc \
  -d rpg-foren.com \
  --fullchainpath

هنا /etc/runit/1.d/letsencrypt

#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf

issue_cert() {
  LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d test.myforum.us -d extrahostname.myforum.us --keylength $1 -w /var/www/discourse/public
}

cert_exists() {
  [[ "$(cd /shared/letsencrypt/test.myforum.us$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")" ]]
}

########################################################
# RSA cert
########################################################
issue_cert "4096"

if ! cert_exists ""; then
  # Try to issue the cert again if something goes wrong
  issue_cert "4096" "--force"
fi

LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
  --installcert \
  -d test.myforum.us \
  -d extrahostname.myforum.us  --fullchainpath /shared/ssl/test.myforum.us.cer \
  --keypath /shared/ssl/test.myforum.us.key \
  --reloadcmd "sv reload nginx"

########################################################
# ECDSA cert
########################################################
issue_cert "ec-256"

if ! cert_exists "_ecc"; then
  # Try to issue the cert again if something goes wrong
  issue_cert "ec-256" "--force"
fi

LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
  --installcert --ecc \
  -d test.myforum.us \
  --fullchainpath /shared/ssl/test.myforum.us_ecc.cer \
  --keypath /shared/ssl/test.myforum.us_ecc.key \
  --reloadcmd "sv reload nginx"

if cert_exists "" || cert_exists "_ecc"; then
  grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"
fi

/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop

آه. أراه في شهادة RSA (السيئة)، ولكن ليس في شهادة ECC (الجيدة).

حسنًا. فهمت الآن. يحتاج مقطع --fullcert هذا إلى global: true فيه. أنا أختبره الآن.

إعجابَين (2)

حسنًا. إليك ملف /etc/runit/1.d/letsencrypt الجديد

#!/bin/bash
/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf

issue_cert() {
  LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh --issue $2 -d test.myforum.us -d extrahostname.myforum.us --keylength $1 -w /var/www/discourse/public
}

cert_exists() {
  [[ "$(cd /shared/letsencrypt/test.myforum.us$1 && openssl verify -CAfile <(openssl x509 -in ca.cer) fullchain.cer | grep "OK")"]]
}

########################################################
# شهادة RSA
########################################################
issue_cert "4096"

if ! cert_exists ""; then
  # حاول إصدار الشهادة مرة أخرى إذا حدث خطأ ما
  issue_cert "4096" "--force"
fi

LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
  --installcert \
  -d test.myforum.us \
  -d extrahostname.myforum.us  --fullchainpath /shared/ssl/test.myforum.us.cer \
  --keypath /shared/ssl/test.myforum.us.key \
  --reloadcmd "sv reload nginx"

########################################################
# شهادة ECDSA
########################################################
issue_cert "ec-256"

if ! cert_exists "_ecc"; then
  # حاول إصدار الشهادة مرة أخرى إذا حدث خطأ ما
  issue_cert "ec-256" "--force"
fi

LE_WORKING_DIR="${LETSENCRYPT_DIR}" /shared/letsencrypt/acme.sh \
  --installcert --ecc \
  -d test.myforum.us \
  -d extrahostname.myforum.us  --fullchainpath /shared/ssl/test.myforum.us_ecc.cer \
  --keypath /shared/ssl/test.myforum.us_ecc.key \
  --reloadcmd "sv reload nginx"

if cert_exists "" || cert_exists "_ecc"; then
  grep -q 'force_https' "/var/www/discourse/config/discourse.conf" || echo "force_https = 'true'" >> "/var/www/discourse/config/discourse.conf"
fi

/usr/sbin/nginx -c /etc/nginx/letsencrypt.conf -s stop
~
~

والآن لدي هذا، والذي يبدو جيدًا؟ https://ssl-tools.net/webservers/extrahostname.myforum.us

هل يبدو هذا صحيحًا؟ إذا كان الأمر كذلك، فسوف أقوم بتحرير المنشور الأصلي لتضمين التوجيه global.

إعجابَين (2)

فكرتي:

    # إخبار letsencrypt بالشهادات الإضافية التي يجب الحصول عليها
    - استبدال:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d www.rpg-foren.com --keylength"
    - استبدال:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--installcert \/
        to:  |
          --installcert \
          -d www.rpg-foren.com
    - استبدال:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--installcert --ecc \/
        to:  |
          --installcert --ecc \
          -d www.rpg-foren.com

هل لا يعمل الخاص بي؟ يحتوي على أسطر أقل من التعليمات البرمجية بمقدار 1/3.

هل لا أرى إعادة كتابة منك؟ أم أنني أفتقد شيئًا؟
أردت فقط إجراء إعادة كتابة لطيفة لتبدو الملفات جيدة في النهاية ^^

لم أفعل ذلك بعد. كنت أنتظر لأرى ما إذا كنت تعتقد أنه يعمل.

إليك التغيير، فقط إضافة global: true إلى نهاية replace: الثانية

    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d =domain2=  --fullchainpath"
        global: true

وهذا هو كل شيء:

  after_ssl:
   # أخبر letsencrypt بالشهادات الإضافية التي يجب الحصول عليها
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d extrahostname.myforum.us --keylength"
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--fullchainpath/
        to: "-d extrahostname.myforum.us  --fullchainpath"
        global: true


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

حسناً، global هو المعامل الذي تحتاجه للاستبدالات المتعددة.

يبدو جيداً من الملفات التي نشرتها، لم أجربه بعد.

نعم. آسف لعدم انتباهي بما فيه الكفاية لفهم ما كنت تتحدث عنه سابقًا. من اختباري (السيء)، “نجح” الأمر، لكنني لم ألاحظ، ولا أعرف كيف أتحقق من أن شهادة ec-whatever موجودة حقًا. شكرًا لكونك مثابرًا.

هل https://ssl-tools.net/webservers/extrahostname.myforum.us تجعله يبدو وكأنه يمتلك الأشياء الصحيحة؟

لقد قمت بتحرير المنشور الأصلي الآن، لذا يمكنك تجربته، ونسخ/لصق من النموذج أعلاه.

إذا كنت ترغب في الاختبار بنفسك على موقع اختبار ويمكنك إرسال مفتاح SSH إلي، فسأمنحك الوصول إلى الموقع الذي قمت بإعداده للتو. بعد ذلك، يمكنك إجراء تثبيت نظيف هناك باستخدام نطاق الاختبار الخاص بك. أو، يمكنك فقط القيام بذلك على موقع الإنتاج الخاص بك وتأمل في الأفضل. :person_shrugging:

يمكنك العثور عليها هنا:

ls -la /var/discourse/shared/standalone/ssl/
total 24
drwxr-xr-x  2 root root 4096 Sep 24 13:02 .
drwxr-xr-x 15 root root 4096 Sep 23 18:31 ..
-rw-r--r--  1 root root 3941 Sep 25 07:43 rpg-foren.com.cer
-rw-r--r--  1 root root 3941 Sep 25 07:43 rpg-foren.com_ecc.cer
-rw-------  1 root root 3243 Sep 25 07:43 rpg-foren.com_ecc.key
-rw-------  1 root root 3243 Sep 25 07:43 rpg-foren.com.key

المشكلة هي أنني لا أعرف كيفية اختبار ecc و rsa بشكل فردي.
نظرًا لأن ملف الإنشاء يناسب الآن، فلا يلزم إجراء المزيد من الاختبارات.

إعجاب واحد (1)
root@test-web-only:/shared/ssl# ls -l
total 16
-rw-r--r-- 1 root root 3953 Sep 25 16:41 test.myforum.us.cer
-rw-r--r-- 1 root root 2877 Sep 25 16:41 test.myforum.us_ecc.cer
-rw------- 1 root root  227 Sep 25 16:41 test.myforum.us_ecc.key
-rw------- 1 root root 3247 Sep 25 16:41 test.myforum.us.key

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

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

يمكنك اختبار الشهادة على هذا النحو:

openssl x509 -in /var/discourse/shared/standalone/ssl/test.myforum.us.cer -noout -text
ثم يجب إدراج النطاقات تحت dns:
DNS:rpg-foren.com, DNS:www.rpg-foren.com

إعجاب واحد (1)
root@test:/var/discourse# openssl x509 -in /var/discourse/shared/web-only/ssl/test.myforum.us.cer -noout -text                       
Certificate:                                                                                                                         
    Data:                                                                                                                            
        Version: 3 (0x2)                                                                                                             
        Serial Number:                                                                                                               
            03:f8:b5:6a:e0:97:53:7f:22:33:81:22:35:b4:3f:73:75:7f 
        Signature Algorithm: sha256WithRSAEncryption                                                                                 
        Issuer: C = US, O = Let's Encrypt, CN = R10                                                                                  
        Validity                                                                                                                     
            Not Before: Sep 25 14:57:13 2024 GMT                  
            Not After : Dec 24 14:57:12 2024 GMT                                                                                     
        Subject: CN = test.myforum.us                            
        Subject Public Key Info:                                  
            Public Key Algorithm: rsaEncryption                   
                Public-Key: (4096 bit)                                                                                                                     
                Modulus:                                                                                                             
                    00:be:a3:9b:79:78:dd:8f:e2:8f:28:f0:d9:6c:74: 
...                    b0:84:33                                                                                                                               
                Exponent: 65537 (0x10001)                                                                                                                  
        X509v3 extensions:                                                                                                                                                                
            X509v3 Key Usage: critical                           
                Digital Signature, Key Encipherment               
            X509v3 Extended Key Usage:                           
                TLS Web Server Authentication, TLS Web Client Authentication                                                                                                              
            X509v3 Basic Constraints: critical                                                                                                                                            
                CA:FALSE                                                                                                                                                                  
            X509v3 Subject Key Identifier:                                                                                                                                                
                43:55:B7:D6:54:03:CE:B0:FB:C8:D1:2A:42:F5:B7:C5:60:C7:D8:48                                                                                                                                                              
            X509v3 Authority Key Identifier:                                 
                BB:BC:C3:47:A5:E4:BC:A9:C6:C3:A4:72:0C:10:8D:A2:35:E1:C8:E8                                                                                
            Authority Information Access:                                    
                OCSP - URI:http://r10.o.lencr.org                                                                                                                                                                                        
                CA Issuers - URI:http://r10.i.lencr.org/                                                                                                                                                                                 
            X509v3 Subject Alternative Name:                                                                                                                                                                                             
                DNS:extrahostname.myforum.us, DNS:test.myforum.us                                                                                                                                                                        
            X509v3 Certificate Policies:                                     
                Policy: 2.23.140.1.2.1                                                       
            CT Precertificate SCTs:                                                          
                Signed Certificate Timestamp:                                                                                                                                                                                            
                    Version   : v1 (0x0)                                                                                                                                                                                                 
                    Log ID    : DF:E1:56:EB:AA:05:AF:B5:9C:0F:86:71:8D:A8:C0:32:                                                                           
                                4E:AE:56:D9:6E:A7:F5:A5:6A:01:D1:C1:3B:BE:52:5C                                                                            
                    Timestamp : Sep 25 15:55:44.143 2024 GMT                                 
                    Extensions: none                                                                                                                                                                                                     
                    Signature : ecdsa-with-SHA256                                                                                                                                                                                        
                    Signed Certificate Timestamp:                                                                       
                    Version   : v1 (0x0)                                                                            
                    Log ID    : A2:E3:0A:E4:45:EF:BD:AD:9B:7E:38:ED:47:67:77:53:                                                                           
                                D7:82:5B:84:94:D7:2B:5E:1B:2C:C4:B9:50:A4:47:E7                                                                            
                    Timestamp : Sep 25 15:55:45.945 2024 GMT                                                        
                    Extensions: none                                                                                
                    Signature : ecdsa-with-SHA256                                                                   
    Signature Algorithm: sha256WithRSAEncryption                                                                    
    Signature Value:                                                                                                
        cf:c6:59:d8                                  

and that includes:

            X509v3 Subject Alternative Name:                                                 
                DNS:extrahostname.myforum.us, DNS:test.myforum.us  

Ah. OK.

openssl x509 -in /var/discourse/shared/web-only/ssl/test.myforum.us_ecc.cer -noout -text 

contains:

            X509v3 Subject Alternative Name: 
                DNS:extrahostname.myforum.us, DNS:test.myforum.us
إعجاب واحد (1)