Puncte:0

Cum să diagnosticați/remediați erorile SSL CloudFormation/autoscaling la descărcarea fișierului

drapel cv

Am un grup de autoscaling care a fost creat de AWS CloudFormation. Funcționează pe Amazon Linux 2. Săptămâna trecută, funcționa bine. Acum, noile instanțe generează o eroare „certificatul a expirat” atunci când încearcă să descarce phpMyAdmin. Pare ca cfn-init rulează yum bine, și preluarea fișierelor din S3 bine, dar nu funcționează când merge să ia fișiere de la distanță (ceea ce se pare că face cu Python).

EDITAȚI | ×: vezi mai jos, dar inițial am crezut că aceasta a fost o problemă cu scripturile Python. Nu mai sunt sigur că este adevărat, pentru că funcționează bine într-un alt grup de autoscaling care prinde fișiere diferite. Deci... acum mă gândesc că este de fapt o problemă cu certificatul de pe phpMyAdmin, dar... nu sunt sigur. Și încă nu știu cum să pun un diagnostic mai departe.

/var/log/cfn-init.log:

2021-10-06 10:08:24,895 [INFO] -----------------------Începe construcția------------
-----------
2021-10-06 10:08:24,896 [DEBUG] Nu setarea unui declanșator de repornire ca presupunere de programare
rt nu este disponibil
2021-10-06 10:08:24,898 [INFO] Se rulează configSets: implicit
2021-10-06 10:08:24,899 [INFO] Running configSet default
2021-10-06 10:08:24,906 [INFO] Se rulează config.
2021-10-06 10:08:34,173 [DEBUG] Instalare/actualizare ['mod_ssl', 'ksh', 'httpd'] 
prin yum
2021-10-06 10:08:37,523 [INFO] Yum instalat ['mod_ssl', 'ksh', 'httpd']
2021-10-06 10:08:37,523 [DEBUG] Niciun grup specificat
2021-10-06 10:08:37,523 [DEBUG] Nu a fost specificat niciun utilizator
2021-10-06 10:08:37,523 [DEBUG] Nu sunt specificate surse
 ... [instalează cu succes unele fișiere din S3 ... ]

2021-10-06 10:08:37,621 [DEBUG] Se scrie conținut în /tmp/phpmyadmin.tgz
2021-10-06 10:08:37,621 [DEBUG] Preluare conținut de la https://www.phpmyadmin.
net/downloads/phpMyAdmin-latest-all-languages.tar.gz
2021-10-06 10:08:37,640 [EROARE] SSLError
Traceback (cel mai recent apel ultimul):
  Fișierul „/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connectionpool.py”, linia 544, în urlopen
    body=body, headers=headers)
  Fișierul „/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connectionpool.py", linia 341, în _make_request
    self._validate_conn(conn)
  Fișierul „/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connectionpool.py", linia 762, în _validate_conn
    conn.connect()
  Fișierul „/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connection.py", linia 238, în connect
    ssl_version=resolved_ssl_version)
  Fișierul „/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages/urllib3/util/ssl_.py”, linia 265, în ssl_wrap_socket
    return context.wrap_socket(sock, server_hostname=server_hostname)
  Fișierul „/usr/lib64/python3.7/ssl.py”, linia 423, în wrap_socket
    sesiune=sesiune
  Fișierul „/usr/lib64/python3.7/ssl.py”, linia 870, în _create
    self.do_handshake()
  Fișierul „/usr/lib64/python3.7/ssl.py”, linia 1139, în do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] verificarea certificatului a eșuat: certificatul a expirat (_ssl.c:1091)
...

dar, dacă mă conectez la mașină, descarc cu wget funcționează bine, EDIT nu mai este adevărat: deci nu cred ca e o problema pe site-ul la distanta, cred ca e ceva cu cfn-init sau scripturile Python asociate.

EDITAȚI | ×: Dintr-un alt grup de autoscaling, creat și de CloudFormation, descărcările de la distanță funcționează:

...
2021-10-07 04:21:10,855 [DEBUG] Se scrie conținut în /tmp/mysql80.rpm
2021-10-07 04:21:10,855 [DEBUG] Preluare conținut de pe https://dev.mysql.com/g
et/mysql80-community-release-el7-2.noarch.rpm
2021-10-07 04:21:11,425 [DEBUG] Setarea modului pentru /tmp/mysql80.rpm la 000600
2021-10-07 04:21:11,425 [DEBUG] Setarea proprietarului 0 și grupului 0 pentru /tmp/mysql80.rpm
...

Deci, se descarcă cu succes de la https://dev.mysql.com/, dar eșuând cu un „certificat expirat” de la https://www.phpmyadmin.net, chiar dacă wget și mergând direct acolo printr-un browser nu arată nicio eroare.

termina EDITARE

Aveți idee despre cum să depanați asta?

Puncte:1
drapel cv

Răspuns scurt:

Utilizați openssl pentru a afla dacă există un certificat expirat:

openssl s_client -showcerts -connect <falingwebsite.com>:443 | grep „certificatul a expirat”

Obțineți noul certificat neexpirat și atașați-l la pachetul AWS ca_bundle:

cat <newcert>.pem >> /path/to/your/python/env/lib/python3.9/site-packages/cfnbootstrap/packages/requests/cacert.pem

Raspuns lung:

Am ajuns să scriu niște scripturi Python pentru a încerca să descarc certificatul de pe server, pentru a vedea dacă ceva nu merge bine cu descărcarea. Nu am primit niciodată certificatele descărcate direct cu urllib3, dar în timp ce urmărind asta pe StackOverflow, @clockwatcher a descoperit problema reală și se pare că va afecta pe alții, și nu doar cu phpMyAdmin.

Are de-a face cu DST Root CA X3 Expirare, care s-a întâmplat pe 30 septembrie. AWS nu include noul certificat în certificatele aprobate, așa că trebuie să îl adăugați manual pe cel nou.

Puteți prelua fișierul pem ISRG Root X1 autosemnat de la LetsEncrypt, apoi adăugați-l la cfnbootstraplui ca_cert.pem dosar, conform mai sus.

Acum, acest lucru rezolvă problema în cazul în care aveți o mașină care rulează; cu toate acestea, este încă o problemă pentru grupurile de autoscaling, deoarece nu există o modalitate ușoară de a utiliza

  AWS::CloudFormation::Init:
    config:
    fisiere:
        /cale/la/fișier:
          sursa: https://somewhere.using.letsencrypt.com/file   

comportament. Deci, oriunde în șabloanele dvs. CloudFormation care utilizează această paradigmă, va trebui să fie rescris, astfel încât atât fișierul pe care îl doriți cu adevărat, cât și certificatul LetsEncrypt să fie descărcate cu wget ca parte a comenzi: secțiune. De exemplu,

        01_get_phpmyadmin:
          comandă: !Alăturați-vă ["",
                       ["wget ​​-O phpmyadmin.tgz",
                        „https://www.phpmyadmin.net/downloads/”,
                        „phpMyAdmin-latest-all-languages.tar.gz”]]
          cwd: /tmp

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.