หากคุณกำลังจัดการใบรับรองลูกโซ่แบบเต็ม (เช่นใบรับรองที่สร้างขึ้นโดย letsencrypt / certbot ฯลฯ ) ซึ่งเป็นการเชื่อมต่อใบรับรองและห่วงโซ่ผู้ออกใบรับรองคุณสามารถใช้การจัดการสตริงของ bash
ตัวอย่างเช่น:
# content of /path/to/fullchain.pem
-----BEGIN CERTIFICATE-----
some long base64 string containing
the certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
another base64 string
containing the first certificate
in the authority chain
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
another base64 string
containing the second certificate
in the authority chain
(there might be more...)
-----END CERTIFICATE-----
ในการแยกใบรับรองและห่วงโซ่ผู้ออกใบรับรองให้เป็นตัวแปร:
# load the certificate into a variable
FULLCHAIN=$(</path/to/fullchain.pem)
CERTIFICATE="${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
CHAIN=$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
คำอธิบาย:
แทนที่จะใช้ awk หรือ openssl (ซึ่งเป็นเครื่องมือที่ทรงพลัง แต่ไม่สามารถใช้ได้ตลอดเวลาเช่นในรูปภาพ Docker Alpine) คุณสามารถใช้การจัดการสตริงของ bash
"${FULLCHAIN%%-----END CERTIFICATE-----*}-----END CERTIFICATE-----"
: จากจุดสิ้นสุดของเนื้อหาของ FULLCHAIN ให้ส่งคืนการจับคู่สตริงย่อยที่ยาวที่สุดจากนั้นต่อ-----END CERTIFICATE-----
ด้วยการถอดออก ตรงกับตัวอักษรของทุกหลัง*
-----END CERTIFICATE-----
$(echo -e "${FULLCHAIN#*-----END CERTIFICATE-----}" | sed '/./,$!d')
: จากจุดเริ่มต้นของเนื้อหาของ FULLCHAIN ส่งคืนการจับคู่สตริงย่อยที่สั้นที่สุดจากนั้นตัดส่วนนำหน้าของบรรทัดใหม่ ในทำนองเดียวกันตรงกับตัวละครทุกตัวก่อน*
-----END CERTIFICATE-----
สำหรับการอ้างอิงอย่างรวดเร็ว (ในขณะที่คุณสามารถค้นหาเพิ่มเติมเกี่ยวกับการจัดการสตริงในการทุบตีที่นี่ ):
${VAR#substring}
= สตริงย่อยสั้นที่สุดจากจุดเริ่มต้นของเนื้อหาของ VAR
${VAR%substring}
= สตริงย่อยสั้นที่สุดจากจุดสิ้นสุดของเนื้อหาของ VAR
${VAR##substring}
= สตริงย่อยที่ยาวที่สุดจากจุดเริ่มต้นของเนื้อหาของ VAR
${VAR%%substring}
= สตริงย่อยที่ยาวที่สุดจากจุดสิ้นสุดของเนื้อหาของ VAR