שאלה כיצד להוריד את תעודת SSL מאתר אינטרנט?


אני רוצה להוריד את תעודת ssl, למשל https://www.google.com, באמצעות wget או כל פקודות אחרות. כל שורת פקודה של Unix? wget או openssl?


162
2018-05-07 21:01






תשובות:


כדי להוריד את האישור, אתה צריך להשתמש הלקוח מובנה openssl כך:

echo -n | openssl s_client -connect HOST:PORTNUMBER \
    | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$SERVERNAME.cert

זה יחסוך את האישור /tmp/$SERVERNAME.cert.

אתה יכול להשתמש -showcerts אם אתה רוצה להוריד את כל האישורים בשרשרת. אבל אם אתה רק רוצה להוריד את תעודת השרת, אין צורך לציין -showcerts

echo -n נותן תגובה לשרת, כך החיבור הוא שוחרר

sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' מסיר מידע על שרשרת האישורים ופרטי החיבור. זהו הפורמט המועדף כדי לייבא את האישור לתוך keystores אחרים.


219
2017-10-19 22:59



מעריכים כי לא רק נתת תשובה טובה, אלא גם הסבר מדויק. - marco.m
האם -showcerts להראות את השרת / העלה cert מדי? חשבתי שזה מוצג רק intermediates כאשר מתג זה נכלל. - Mike B
כפי שהתשובה אמרה, s_client תמיד מראה את השרת cert (אם יש אחד, כלומר השרת מגיב שלום ולא לבחור חבילת אנונימי). -showcerts מופעים את כל את certs קיבל, cert cert תחילה ולאחר מכן intermediates ו / או שורש. - dave_thompson_085
זה לא עובד נוכחות של proxy, אם כי. - Frederick Nord
זה גם לא עובד עם שרתים המשתמשים SNI (אישורים מרובים / תחומים על כתובת ה- IP יחיד). כדי להימנע מבעיות, ציין את הפרמטר servername של openssl: openssl s_client-connect HOST: PORTNUMBER -servername CN - verhage


מצאתי את התשובה. Opensll מספק את זה.

openssl s_client-connect $ {REMHOST}: $ {REMPORT}


54
2018-05-07 21:05



גם openssl x509 -text <<EOF cert-text EOF כדי לראות פרטים על התעודה - mpapis
sudo rm -f cert.pem && sudo echo -n | openssl s_client -connect localhost:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./cert.pem באדיבות serverfault.com/questions/139728/... - pulkitsinghal
זה משיגה אותו ו מדלג על sed גרזן. - phs
זה רק בודק תעודה אחת, מה אם השירות הוא חלק מקבוצת עומס מאוזנת של שרתים, שלכל אחד מהם יש אישור שונה, אולי חתום על ידי CA שורש שונה? או במילים אחרות, התקפת מטען עלולה לאפשר לבקשה זו לעבור לשטח האמיתי, ולאחר מכן להפנות בקשות אחרות לשרתים שלו. האם יש דרכים לבדוק זאת? וכדי לקבל רשימה של כל האישורים תחום באמת? - Jens Timmerman
@JensTimmerman "או במילים אחרות, התקפת מטען עלולה לתת לבקשה הזאת לעבור לשטח האמיתי, ולאחר מכן להפנות בקשות אחרות לשרתים שלו". זה לא אפשרי, אלא אם כן לאיש- in-the-middle יש תעודה תקפה עבור שרת היעד (או שהלקוח מטופש לא בודק את תעודת השרת). ככל הנראה, אם השרת מציע לפעמים תעודה אחרת אתה יכול רק מקווה כנראה בסופו של דבר לקבל את כולם על ידי ניסיונות חיבור חוזרים. - David Tonhofer


ה GNUTLS כלי לקוח, gnutls-cli, יכול גם לעשות את זה קל:

gnutls-cli --print-cert www.example.com \
        < /dev/null \
        > www.example.com.certs

התוכנית נועדה לספק ללקוח אינטראקטיבי לאתר, כך שאתה צריך לתת לו קלט ריק (בדוגמה זו, מ /dev/null) כדי לסיים את הפגישה האינטראקטיבית.


20
2017-10-07 06:19



איך זה יגרום gnutls להתחבר דרך (מערכת רחב מוגדר) פרוקסי HTTP ולהדפיס את התעודה זה exchages? - Frederick Nord


על סמך התשובה @bignose, הנה גרסה עצמאית שמתאימה היטב לדוגמה. מתכון שף:

sudo apt-get install gnutls-bin 
gnutls-cli --print-cert myserver.com </dev/null| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > myserver.crt
sudo cp myserver.crt /usr/local/share/ca-certificates/myserver.crt
sudo update-ca-certificates

8
2018-05-27 09:31





true | openssl s_client -connect google.com:443 2>/dev/null | openssl x509

מצב זה של openssl מצפה stdin, ולכן אנו מספקים את זה דרך true |, זה מתחבר לשרת שצוין בפרמטר -connect. 2>/dev/null שגיאות השתקה (אופציונלי), אנחנו יכולים להעביר את הפלט כולו לתוך מנתח x509, המפרט /dev/stdin להשתמש בצינור הקליפה כקובץ הקלט. וזה יהיה פלט רק -----BEGIN CERTIFICATE----- ל -----END CERTIFICATE----- חלק s_client פלט. ניתן להפנות אותו לקובץ על ידי הוספה > google.com.pem עד סוף הפקודה.


כפי שאני יכול לספר, זה לא לאמת את שרשרת האישור, זה רק יכול להגיד לך מה זהותו של SSL השרת מספק.


6
2018-01-12 10:38



(1) זה לא ממש לשפר את התשובות מ 6 שנים (2) x509 קורא stdin כברירת מחדל כך -in /dev/stdin הוא מיותר (3) s_client מאמת את שרתי השרתים כהלכה לעוגן אמון מקומי (root) והוא אינו פעיל, אך דיכאת את המידע שיציג זאת (4) הוא אינו בודק את הביטול (5) הוא בודק את שם ב cert Server רק ב 1.0.2 ולאחר מכן לא כברירת מחדל (אבל אתה יכול בקלות לבדוק את זה בעצמך על ידי הסתכלות על cert לאחר מכן) - dave_thompson_085
@ dave_thompson_085, השאלה היא איך להוריד את האישור, אבל לא להראות מידע שרשרת. אני אוהב את x509 openssl הרבה יותר טוב מאשר תשובה אחרת. - Der_Meister


תחביר אלטרנטיבי באמצעות תחליף Ex ו- Process:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt

0