Score:0

วิธีวินิจฉัย/แก้ไขข้อผิดพลาด CloudFormation/การปรับขนาด SSL อัตโนมัติเมื่อดาวน์โหลดไฟล์

ธง cv

ฉันมีกลุ่มการปรับขนาดอัตโนมัติที่สร้างโดย AWS CloudFormation มันทำงานบน Amazon Linux 2 สัปดาห์ที่แล้วมันทำงานได้ดี ตอนนี้ อินสแตนซ์ใหม่แสดงข้อผิดพลาด "ใบรับรองหมดอายุ" เมื่อพยายามดาวน์โหลด phpMyAdmin มันจะปรากฏขึ้น cfn-init กำลังวิ่ง ยำ สบายดีและคว้าไฟล์จาก S3 ได้ แต่ไม่ทำงานเมื่อมันไปคว้าไฟล์ระยะไกล (ซึ่งดูเหมือนว่าจะทำกับ Python)

แก้ไข: ดูด้านล่าง แต่ในตอนแรกฉันคิดว่านี่เป็นปัญหากับสคริปต์ Python ฉันไม่แน่ใจอีกต่อไปว่าจริงไหม เพราะมันทำงานได้ดีในกลุ่มการปรับขนาดอัตโนมัติที่แตกต่างกันซึ่งจับไฟล์ต่างๆ ดังนั้น ... ตอนนี้ฉันคิดว่ามันเป็นปัญหาจริง ๆ กับใบรับรองใน phpMyAdmin แต่ ... ฉันไม่แน่ใจ และยังไม่รู้ว่าจะวินิจฉัยอย่างไรต่อไป

/var/log/cfn-init.log:

2021-10-06 10:08:24,895 [INFO] ----------------------- กำลังเริ่มสร้าง ------------
-----------
2021-10-06 10:08:24,896 [DEBUG] ไม่ได้ตั้งค่าการรีบูตทริกเกอร์เป็นการตั้งเวลาเสริม
rt ไม่สามารถใช้ได้
2021-10-06 10:08:24,898 [INFO] กำลังเรียกใช้ configSets: ค่าเริ่มต้น
2021-10-06 10:08:24,899 [INFO] กำลังเรียกใช้ configSet เริ่มต้น
2021-10-06 10:08:24,906 [INFO] กำลังเรียกใช้ config config
2021-10-06 10:08:34,173 [DEBUG] กำลังติดตั้ง/อัปเดต ['mod_ssl', 'ksh', 'httpd'] 
ผ่านทางยำ
2021-10-06 10:08:37,523 [INFO] Yum ติดตั้งแล้ว ['mod_ssl', 'ksh', 'httpd']
2021-10-06 10:08:37,523 [DEBUG] ไม่ได้ระบุกลุ่ม
2021-10-06 10:08:37,523 [DEBUG] ไม่ได้ระบุผู้ใช้
2021-10-06 10:08:37,523 [DEBUG] ไม่ได้ระบุแหล่งที่มา
 ... [ติดตั้งบางไฟล์จาก S3 สำเร็จ ... ]

2021-10-06 10:08:37,621 [DEBUG] กำลังเขียนเนื้อหาไปที่ /tmp/phpmyadmin.tgz
2021-10-06 10:08:37,621 [DEBUG] กำลังดึงเนื้อหาจาก https://www.phpmyadmin
net/downloads/phpMyAdmin-latest-all-languages.tar.gz
2021-10-06 10:08:37,640 [ข้อผิดพลาด] SSLError
Traceback (การโทรครั้งล่าสุดล่าสุด):
  ไฟล์ "/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connectionpool.py", บรรทัด 544, ใน urlopen
    body=body, headers=ส่วนหัว)
  ไฟล์ "/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connectionpool.py", บรรทัด 341 ใน _make_request
    self._validate_conn(คอน)
  ไฟล์ "/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connectionpool.py", บรรทัด 762 ใน _validate_conn
    conn.connect()
  ไฟล์ "/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages
/urllib3/connection.py", บรรทัด 238, ในการเชื่อมต่อ
    ssl_version=resolved_ssl_version)
  ไฟล์ "/usr/lib/python3.7/site-packages/cfnbootstrap/packages/requests/packages/urllib3/util/ssl_.py", บรรทัด 265 ใน ssl_wrap_socket
    ส่งคืน Context.wrap_socket (ถุงเท้า, server_hostname=server_hostname)
  ไฟล์ "/usr/lib64/python3.7/ssl.py", บรรทัด 423 ใน wrap_socket
    เซสชัน = เซสชัน
  ไฟล์ "/usr/lib64/python3.7/ssl.py", บรรทัด 870 ใน _create
    self.do_handshake()
  ไฟล์ "/usr/lib64/python3.7/ssl.py", บรรทัด 1139 ใน do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] การตรวจสอบใบรับรองล้มเหลว: ใบรับรองหมดอายุ (_ssl.c:1091)
...

แต่ถ้าล็อกอินเข้าเครื่องแล้วดาวน์โหลดด้วย ว้าว ใช้งานได้ดี แก้ไข ไม่เป็นความจริงอีกต่อไป: ดังนั้นฉันไม่คิดว่ามันเป็นปัญหาบนไซต์ระยะไกล ฉันคิดว่ามันเป็นเรื่องของ cfn-init หรือสคริปต์ Python ที่เกี่ยวข้อง

แก้ไข: จากกลุ่มการปรับขนาดอัตโนมัติอื่น ซึ่งสร้างโดย CloudFormation เช่นกัน การดาวน์โหลดระยะไกลจะทำงาน:

...
2021-10-07 04:21:10,855 [DEBUG] กำลังเขียนเนื้อหาไปที่ /tmp/mysql80.rpm
2021-10-07 04:21:10,855 [DEBUG] กำลังดึงเนื้อหาจาก https://dev.mysql.com/g
et/mysql80-community-release-el7-2.noarch.rpm
2021-10-07 04:21:11,425 [DEBUG] โหมดการตั้งค่าสำหรับ /tmp/mysql80.rpm ถึง 000600
2021-10-07 04:21:11,425 [DEBUG] การตั้งค่าเจ้าของ 0 และกลุ่ม 0 สำหรับ /tmp/mysql80.rpm
...

ดังนั้นจึงดาวน์โหลดสำเร็จจาก https://dev.mysql.com/แต่ล้มเหลวด้วย "ใบรับรองที่หมดอายุ" จาก https://www.phpmyadmin.net, แม้ว่า ว้าว และการไปที่นั่นโดยตรงผ่านเบราว์เซอร์จะไม่แสดงข้อผิดพลาดใดๆ

สิ้นสุดการแก้ไข

มีความคิดเกี่ยวกับวิธีการแก้ปัญหานี้หรือไม่?

Score:1
ธง cv

คำตอบสั้น ๆ :

ใช้ opensl เพื่อดูว่ามีใบรับรองที่หมดอายุหรือไม่:

openssl s_client -showcerts -เชื่อมต่อ <falingwebsite.com>:443 | grep "ใบรับรองหมดอายุ"

รับใบรับรองใหม่ที่ยังไม่หมดอายุและแนบไปกับแพ็คเกจ AWS ca_bundle:

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

คำตอบยาว:

ฉันลงเอยด้วยการเขียนสคริปต์ไพธอนเพื่อลองและดาวน์โหลดใบรับรองฝั่งเซิร์ฟเวอร์ เพื่อดูว่ามีบางอย่างผิดปกติกับการดาวน์โหลดหรือไม่ ฉันไม่เคยดาวน์โหลดใบรับรองโดยตรงด้วย urllib3แต่ในขณะที่ ไล่ตามนั้นใน StackOverflow, @clockwatcher ค้นพบปัญหาที่แท้จริง และดูเหมือนว่าน่าจะส่งผลกระทบต่อผู้อื่น ไม่ใช่แค่กับ phpMyAdmin

มันเกี่ยวข้องกับ DST Root CA X3 หมดอายุซึ่งเกิดขึ้นเมื่อวันที่ 30 กันยายนที่ผ่านมา AWS ไม่รวมใบรับรองใหม่ไว้ในใบรับรองที่ได้รับอนุมัติแบบรวม ดังนั้นคุณต้องเพิ่มใบรับรองใหม่ด้วยตนเอง

คุณสามารถคว้าไฟล์ pem ISRG Root X1 ที่ลงนามด้วยตนเองได้จาก LetsEncryptแล้วเพิ่มลงใน cfnbootstrap's ca_cert.pem ไฟล์ตามด้านบน

ตอนนี้ช่วยแก้ปัญหาในกรณีที่คุณมีเครื่องที่กำลังทำงานอยู่ อย่างไรก็ตาม ยังคงเป็นปัญหาสำหรับกลุ่มการปรับขนาดอัตโนมัติ เนื่องจากไม่มีวิธีง่ายๆ ในการใช้

  AWS::CloudFormation::Init:
    การกำหนดค่า:
    ไฟล์:
        / เส้นทาง / ถึง / ไฟล์:
          ที่มา: https://somewhere.using.letsencrypt.com/file   

พฤติกรรม. ดังนั้น ที่ใดก็ตามในเทมเพลต CloudFormation ของคุณที่ใช้กระบวนทัศน์นั้น จะต้องเขียนใหม่เพื่อให้ทั้งไฟล์ที่คุณต้องการจริง ๆ และใบรับรอง LetsEncrypt ถูกดาวน์โหลดด้วย ว้าว เป็นส่วนหนึ่งของ คำสั่ง: ส่วน. ตัวอย่างเช่น,

        01_get_phpmyadmin:
          คำสั่ง: !เข้าร่วม ["",
                       ["wget ​​-O phpmyadmin.tgz",
                        "https://www.phpmyadmin.net/downloads/",
                        "phpMyAdmin-latest-all-languages.tar.gz"]]
          cwd: /tmp

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา