איך להשיג תעודת Let's Encrypt באמצעות אימות DNS עם acme-dns-certbot על אובונטו 18.04

המחבר בחר בקרן סיוע COVID-19 כדי לקבל תרומה כחלק מתוכנית "כתוב למענה לתרומות".

הקדמה

רוב התעודות של Let's Encrypt מונפקות באמצעות אימות HTTP, שמאפשר התקנת תעודות בקלות על שרת יחיד. אולם, אימות HTTP לא תמיד מתאים להנפקת תעודות לשימוש באתרים שמאוזנים במערך, ולא ניתן להשתמש בו כדי להנפיק תעודות כוכביות.

אימות DNS מאפשר אימות של בקשות להנפקת תעודות באמצעות רשומות DNS, במקום לספק תוכן דרך HTTP. זה אומר שאפשר להנפיק תעודות באותו זמן עבור אשף שרתי אינטרנט הפועלים מאחורי מאזן מעמסה, או עבור מערכת שאינה נגישה ישירות דרך האינטרנט. תעודות כוכביות גם נתמכות באימות DNS.

הכלי acme-dns-certbot משמש להתחברות Certbot לשרת DNS של מקבל שלישי, בו מודרכים מסמכים באופן אוטומטי דרך API בזמן שמבקשים מסמך. היתרון של זה הוא שאתה לא צריך לשלב את Certbot ישירות עם חשבון הספק שלך לשרת DNS, וגם לא צריך לספק לו גישה בלתי מוגבלת לתצורת ה DNS שלך, מה שמועיל לביטחון.

האזורים DNS הממוצעים DNS zones משמשים כדי להוריד את החיפושים עבור רשומים אומרים על המסמך לשרת DNS של המקבל שלישי, כך שאחרי שההגדרה הראשונית הסתיימה, ניתן לבקש כמה מסמכים שהוא רצה בלי לבצע אימוץ ידני בעצם.

היתרון עיקרי נוסף של acme-dns-certbot הוא שהוא יכול להשתמש בו ליישם מסמכים עבור שרתים פרטיים שעשויים לרוץ מאחורי מעבד העל, או שאינם נגישים ישירות דרך HTTP. הדרך המסורתית של אימוץ מסמכים HTTP אינה ניתנת במקרים אלה, אלא אם תשים את הקובצים המאמרים על כל שרת. הכלי acme-dns-certbot יעיל גם אם רוצים להשתמש בו ליישם מסמך עבור שרת שאינו נגיש דרך האינטרנט, כמו מערכת פנימית או סביבת בדיקה.

בהדרכה זו, תשתמשו בקש 'hook' acme-dns-certbot עבור Certbot כדי ליישם מסמך Let's Encrypt באמצעות אימוץ דרך DNS.

תנאי קבע

כדי להשלים את המדריך הזה, תדרשו:

  • שרת Ubuntu 18.04 שנהגה על ידי הבאת אחריות על השיטת התחלת השרת עם Ubuntu 18.04, כולל משתמש sudo שאינו ראשון לשם.
  • שם רשת שאתה יכול לרשום סימן טעימת טLS עליו, כולל את היכולת להוסיף רשומים DNS. בדוגמה הספציפית הזו, אנחנו נשתמש בyour-domain ובsubdomain.your-domain, בנוסף ל*.your-domain עבור סימן טעימת טLS גלובלי. אך אם נדרשה, זה יכול להיערך עבור שם רשת אחר, תת רשומים או סימנים גלובליים אם נדרשה.

ברגע שתהיו מוכנים לאחר הדברים האלה, תחברו לשרת שלכם בתור משתמש לא ראשון כדי להתחיל.

שלב 1 — התקנת Certbot

בשלב זה, תהיו מותקנים את Certbot, שהוא תוכנה שמשתמשת ליצור וניהול רישיונות Let’s Encrypt.

Certbot זמין באג 'נדה האופיינית של Ubuntu Apt, אך מומלץ להשתמש באג 'נדה שממשקים את הפיתוחאים של Certbot, בגלל שהיא תמיד מקבלת את הגירסה העדכנית של התוכנה.

התחל על ידי הוספת אג 'נדת Certbot:

sudo apt-add-repository ppa:certbot/certbot

תצטרכו ללחוץ ENTER כדי לקבל את ההזמנה ולהוסיף את האג 'נדה חדשה למערכת שלכם.

בהמשך, תתקנו את ערימת התוכנה Certbot:

sudo apt install certbot

אחרי שהתקנה תיגמר, תוכלו לבדוק שCertbot נתקן בהצלחה:

certbot --version

זה ייצא דברים דומים למה שנראה אחרת:

Output
certbot 0.31.0

בשלב זה תתקנו Certbot. בהמשך, תורידו ותתקנו את acme-dns-certbot הקש.

שלב 2 — התקנת acme-dns-certbot

עכשיו שהתוכנה הבסיסית של Certbot נתקנה, תוכלו לוריד ולתקן acme-dns-certbot, שיאפשר לCertbot לפעול במצב ודאיון DNS.

התחל על ידי הורידת הגירסה של הסקריpt:

הערה: כמיטב מנהג, תוודא שתבדוק את ה מאגר Github הזה ואת הסקripט לפני שיריצה. אתה גם יכול קודם להפרית את ה מאגר הזה ואז להשתמש בסקריpt acme-dns-certbot.py. ההפריט הזה מספק שכבה נוספת של אבטחה, שמונעת מהסקריpt להיות מעל שלנו ופחות נפלאת לשינויים לא מוודאים.

wget https://github.com/joohoi/acme-dns-certbot-joohoi/raw/master/acme-dns-auth.py

אחרי שההורדה תישלמה, תסמיק את הסקripט כיוון שהוא יכול להיות מופעל:

chmod +x acme-dns-auth.py

אחר כך, תערבב את הקובץ בעזרת מתונך טקסט האהוב עלך ותשנה את השורה הראשונה על מנת לדחוף אותו להשתמש ב Python 3:

nano acme-dns-auth.py

הוסף 3 לסוף השורה הראשונה:

acme-dns-certbot.py
#!/usr/bin/env python3
. . .

זה נדרש כדי לוודא שהסקריpt משתמש בגירסה העדכנית בעלת הסיומן המאצע של Python 3, במקום Python 2 המושגים.

אחר הסיום, שמו וסגר את הקובץ.

לבסוף, העבר את הסקריpt לתוך המידע של Certbot Let’s Encrypt כדי שCertbot יוכל להטעין אותו:

sudo mv acme-dns-auth.py /etc/letsencrypt/

בשלב זה, הורידת והתקנת הקשר acme-dns-certbot.py. בהמשך, תוכל להתחיל בתהליך ההכנה ולהתקדם ליישום הרשימה הראשונה שלך.

שלב 3 — הגדרת acme-dns-certbot

על מנת להתחיל להשתמש בacme-dns-certbot, עליך לבצע תהליך הגדרה ראשוני ולהיות מסוגל להוציא לפחות סימן-מסמך אחד.

התחל על ידי בעיית המסמך של Certbot באמצעות אימות DNS. זה יריץ את הסקripт acme-dns-certbot ויגרם את התהליך הגדרה הראשון:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain -d your-domain

בעזרת הארגום --manual אתה מעצבעת את כל התאמה האוטומטית של Certbot. במקרה זה, אתה פשוט מוציא סימן-מסמך ראשון, במקום להתאים אותו בשירות באופן אוטומטי בנוסף.

אתה מתגוגע בCertbot להשתמש בתוך הקטע acme-dns-certbot באמצעות הנגדל --manual-auth-hook. אתה מפעיל את הארגום --preferred-challenges כך שCertbot יתעדה על אימות DNS.

אתה גם חייב לספר לCertbot לעצור לפני שינסה לאימות את הסימן-מסמך, שעושה בעזרת הארגום --debug-challenges. זה על מנת לאפשר לך להגיד את הרשימה CNAME שהדרכה על ידי acme-dns-certbot, שעוסק בזה בשלב זה. בלי הארגום --debug-challenges, Certbot לא יעצה, כך שלא תהיה מספיק זמן לבצע את השינוי הדNS הנחוץ.

אזהרה: דרך אגב, אחת מההערכות הללו עשויה להיות גרועה. הערכות האחרות נראות בסדר.

אחרי שתבצעו את כל הצעדים הרגילים של Certbot, תיעדו את המסר הבא שדומה לבא:

Output
... Output from acme-dns-auth.py: Please add the following CNAME record to your main DNS zone: _acme-challenge.your-domain CNAME a15ce5b2-f170-4c91-97bf-09a5764a88f6.auth.acme-dns.io. Waiting for verification... ...

תזדקקו להוספת הוסף של השונה הנחוץ של DNS CNAME להגדרת DNS עבור המקום שלכם. זה יעיל להעניק של שירות ה DNS ACME, שיאפשר ל acme-dns-certbot להגדיר את השונות הדירוג הנחוצות כדי לאמת את בקשת הסימנים.

אם אתם משתמשים ב DigitalOcean כספק של DNS, תוכלו להגדיר את השונה ה DNS בפניל השליטה שלכם:

מומחים מוצעים את ה TTL (זמן-לחיים) לעד 300 שניות כדי לסייע להבטיחה ששינויים בשונה יתקדמו במהירות.

ברגע שתיקחו את השונה ה DNS, תחזורו ל Certbot ולחצו על ENTER כדי לאמת את בקשת הסימנים ולסיים את תהליך היציאה.

זה יקח מספר שניות, ואתם אז תראו מסר שאישר שהסימן ניצוף:

Output
... Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/your-domain/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/your-domain/privkey.pem ...

התרחש העסקה עם acme-dns-certbot לראשונה, נוספו השונות ה DNS הנחוצים, וניצוף סימן בהצלחה. בהמשך תסדרו את הרכיבה האוטומטית של הסימן שלכם.

שלב 4 — השתמשות בacme-dns-certbot

בשלב האחרון הזה, תשתמשות בacme-dns-certbot כדי להעתיק יותר מסמכים ולרפא את המסמכים הקיימים.

ראשית, מאז שהצלחתם להעתיק לפחות אחד מסמך באמצעות acme-dns-certbot, תוכלו להמשיך ולהעתיק מסמכים עבור אותם שמות DNS בלי להוסיף שוב שרשרת דיוקים CNAME. אך אם תרצו להרוויח מסמך עבור חלקים הכנסים אחרים או שם מקום חדש לחלוטין, תצטרכו להוסיף שוב שרשרת CNAME לחלקים הכנסים.

לדוגמה, תוכלו להעתיק מסמך ספר עצמי בלילה בלי לבצע את האימוץ המקורי שוב:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d \*.your-domain

אך אם הייתם רוצים להעתיק מסמך עבור חלק כנסים, הייתם מודעים להוסיף שרשרת CNAME לחלקים הכנסים:

sudo certbot certonly --manual --manual-auth-hook /etc/letsencrypt/acme-dns-auth.py --preferred-challenges dns --debug-challenges -d subdomain.your-domain

זה יראה תוצאה דומה להגדרה המקורית שעשיתם בשלב 3:

Output
... Please add the following CNAME record to your main DNS zone: _acme-challenge.subdomain.your-domain CNAME 8450fb54-8e01-4bfe-961a-424befd05088.auth.acme-dns.io. Waiting for verification... ...

עכשיו שתוכלו להשתמש בacme-dns-certbot להעתיק מסמכים, שווה לחשוב גם על תהליך הרפואה הזה.

אחרי שהמסמכים שלכם מתקרבים לסיומם, Certbot יכול לרפא אותם באופן אוטומטי לעברכם:

sudo certbot renew

תהליך הרפואה יוכל להתחיל ולהגיע לסיום בלי תקשורת אדם, והוא יזכור את כל אפשרויות ההגדרה שאיתן סיפקתם בעת ההגדרה המקורית.

כדי לבדוק שזה פועל ללא הצטרפות לתאריך האחרון של התוקף, אתה יכול לגרום למתבצע מבצע ריק. זה ידמה את תהליך הרenewal ללא שינוי אפילו בהגדרה שלך.

אתה יכול לגרום למתבצע ריק בעזרת הפקודה הרגילה renew, אבל עם הארגון --dry-run:

sudo certbot renew --dry-run

זה ייצא משהו דומה לבאותה, שיספק את הבטחה שהתהליך החדש עובד נכון:

Output
... Cert not due for renewal, but simulating renewal for dry run Plugins selected: Authenticator manual, Installer None Renewing an existing certificate Performing the following challenges: dns-01 challenge for your-domain dns-01 challenge for your-domain Waiting for verification... Cleaning up challenges ...

בשלב האחרון הזה, הוצאת סימן ניהול נוסף ואז בדקת את תהליך הרenewal האוטומטי בתוך Certbot.

סיכום

במאמר הזה, הגדרת את Certbot עם acme-dns-certbot כדי להעלות סימנים בעזרת אבטחת DNS. זה פתח את אפשרות השימוש בסימנים המקריים בנוסף לניהול רשת גדולה של שרתים אינטרנטיים נפרדים שעשויים להיות מאחורי מעבד העליזה.

תספק לעצמך להסתכל על האחסון של acme-dns-certbot עבור עדכונים בסקריpt, כי תמיד מומלץ להריץ את הגירסה הנתמכת האחרונה.

אם אתה מעוניין ללמוד עוד על acme-dns-certbot, אולי תרצה לסקיר את המסמך העליון עבור הפרוייקט acme-dns, שהוא הרכב הצד של acme-dns-certbot:

התוכנה acme-dns יכולה גם להוצאה לשימוש בעצמת שירות, שיהיה יעיל אם אתה פועל בסביבות בטיחות גבוהות או סביבות מורכבות.

אחרת, תוכל לעבור על הפרטים הטכניים של אימות ה DNS ACME על-ידי סקירת החלק המתאים ממסמך ה RFC הרשמי, שמתאר איך התהליך פועל:

Source:
https://www.digitalocean.com/community/tutorials/how-to-acquire-a-let-s-encrypt-certificate-using-dns-validation-with-acme-dns-certbot-on-ubuntu-18-04