වෙබ් අඩවියකින් එස්එස්එල් සහතිකය බාගත කරන්නේ කෙසේද?


Answers:


260

සහතිකය බාගත කිරීම සඳහා, ඔබ ඕපන්සල් හි ගොඩනගා ඇති සේවාදායකයා භාවිතා කළ යුතුය:

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'සහතික දාමය සහ සම්බන්ධතා තොරතුරු පිළිබඳ තොරතුරු ඉවත් කරයි. සහතිකය වෙනත් යතුරු ගබඩාවලට ආනයනය කිරීමට වඩාත් කැමති ආකෘතිය මෙයයි.


11
ඔබ හොඳ පිළිතුරක් පමණක් නොව නිවැරදි පැහැදිලි කිරීමක් ද ලබා ඇති බව අගය කරන්න.
marco.m

5
මෙය ප්‍රොක්සියක පවතින ආකාරයට ක්‍රියා නොකරයි.
ෆෙඩ්රික් නෝර්ඩ්

2
මෙය SNI භාවිතා කරන සේවාදායකයන් සමඟද ක්‍රියා නොකරයි (එක් IP-ඇඩ්‍රස් එකක බහු සහතික / වසම්). ගැටළු වළක්වා ගැනීම සඳහා, openssl හි සේවාදායක නාම පරාමිතිය සඳහන් කරන්න: openssl s_client -connect HOST: PORTNUMBER -servername CN
verhage

1
sedවිධානයට කෙටි විකල්පයක් වේ openssl x509. කිසිදු අතිරේක තර්ක තොරව, stdin සිට පෙම්-ආකෘතිකරණය Cert ලිවීම් හා කියවීම් අතර නෑ ඕනෑම දෙයක් නොසලකා හරිමින්, පෙම් ආකෘතියෙන් නැවත stdout එය මුද්රණය -BEGIN CERTIFICATE-හා -END CERTIFICATE-මාර්ග.
තෝමස්

2
openssl 1.1.0 සහ ඊට වැඩි ප්‍රමාණයක් දැන් -proxy(උදා -proxy 127.0.0.1:3000) විකල්පය සමඟ ප්‍රොක්සි සඳහා සහය දක්වයි .
නික් ස්පේස්ක්

60

මම පිළිතුර සොයාගත්තා. Openssl එය සපයයි.

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


2
openssl x509 -text <<EOF cert-text EOF, මෙම සහතිකය විස්තර දැන ගැනීමට
mpapis

2
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

1
මෙය එකම ආකාරයකින් ඉටු කර sedහැක් කිරීම මඟහරියි .
phs

මෙය එක් සහතිකයක් පමණක් පරික්ෂා කරයි, සේවාව බර සමතුලිත සේවාදායක සමූහයක කොටසක් නම්, ඒ සෑම එකක්ම වෙනස් සහතිකයක් ඇති, සමහර විට වෙනත් මූල CA මගින් අත්සන් කර තිබේද? නැතහොත් වෙනත් වචන වලින් කිවහොත්, මිට්ම් ප්‍රහාරයක් මඟින් මෙම ඉල්ලීම සැබෑ වෙබ් අඩවියට ගෙන යා හැකි අතර පසුව වෙනත් ඉල්ලීම් ඔහුගේ සේවාදායකයන් වෙත යොමු කරයි. මෙය පරීක්ෂා කිරීමට ක්‍රම තිබේද? වසමකට සැබවින්ම ඇති සියලුම සහතික ලැයිස්තුවක් ලබා ගැනීමට?
ජෙන්ස් ටිමර්මන්

En ජෙන්ස්ටිමර්මන් "නැතහොත් වෙනත් වචන වලින් කිවහොත්, මිට්ම් ප්‍රහාරයක් මගින් මෙම ඉල්ලීම සැබෑ වෙබ් අඩවියට ගෙන යා හැකි අතර පසුව වෙනත් ඉල්ලීම් ඔහුගේ සේවාදායකයන් වෙත යොමු කරන්න." ඉලක්කගත සේවාදායකයා සඳහා වලංගු සහතිකයක් මැද-මිනිසා අතර නොමැති නම් එය කළ නොහැකිය (හෝ සේවාදායකයා මෝඩ නම් සේවාදායක සහතිකය පරීක්ෂා නොකරයි). පෙනෙන විදිහට, සේවාදායකයා සමහර විට වෙනත් සහතිකයක් ලබා දෙන්නේ නම්, සම්බන්ධතා උත්සාහයන් පුනරාවර්තනය කිරීමෙන් ඔබට අවසානයේදී ඒවා ලබා ගැනීමට බලාපොරොත්තු විය හැකිය.
ඩේවිඩ් ටොන්හෝෆර්

24

මෙම GNUTLS සේවාදායකයා මෙවලම, gnutls-cliද එය පහසු කළ හැක:

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

වැඩසටහන සැලසුම් කර ඇත්තේ වෙබ් අඩවියට අන්තර්ක්‍රියාකාරී සේවාදායකයකු සැපයීම සඳහා වන අතර, එබැවින් /dev/nullඅන්තර්ක්‍රියාකාරී සැසිය අවසන් කිරීම සඳහා ඔබට එය හිස් ආදානය (මෙම උදාහරණයේ සිට ) ලබා දිය යුතුය.


1
(පද්ධතිය පුරා වින්‍යාස කර ඇති) https ප්‍රොක්සි හරහා gnutls සම්බන්ධ වන්නේ කෙසේද සහ එය හුවමාරු කරන සහතිකය මුද්‍රණය කරන්නේ කෙසේද?
ෆෙඩ්රික් නෝර්ඩ්

මෙය බොහෝ සහතික මුද්‍රණය කරයි, මම දන්නේ නැහැ
datdinhquoc

මෙම gnutls-cli නවතම සහතිකය ලබා දෙයි, opensl s_client භාවිතා කරන විට මට පැරණි සහතිකය ලැබුණි
datdinhquoc

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

මෙම opensl මාදිලිය stdin අපේක්ෂා කරයි, එබැවින් අපි එය හරහා සපයන්නෙමු true |, මෙය -connect පරාමිතියේ නිශ්චිතව දක්වා ඇති සේවාදායකයට සම්බන්ධ වේ. 2>/dev/nullදෝෂ නිශ්ශබ්ද කරයි (අත්‍යවශ්‍ය නොවේ), අපට සම්පූර්ණ ප්‍රතිදානය x509 විග්‍රහයට යැවිය /dev/stdinහැකිය, ආදාන ගොනුව ලෙස ෂෙල් පයිප්ප භාවිතා කිරීමට නියම කරයි. ඒ කැමැත්ත ප්රතිදානය පමණක් -----BEGIN CERTIFICATE-----කිරීමට -----END CERTIFICATE-----එම කොටසක් s_clientප්රතිදානය. > google.com.pemවිධානයේ අවසානයට එකතු කිරීමෙන් ඔබට එය ගොනුවකට හරවා යැවිය හැකිය .


මට කිව හැකි හොඳම පරිදි, මෙය සහතික දාමය සත්‍යාපනය නොකරයි, එයට ඔබට පැවසිය හැක්කේ අවසාන සේවාදායකය සපයන එස්එස්එල් අනන්‍යතාවය පමණි.


2
(1) මෙය මීට වසර 6 කට පෙර සිට පිළිතුරු සැබවින්ම වැඩිදියුණු නොකරයි (2) x509පෙරනිමියෙන් stdin කියවන බැවින් -in /dev/stdinඅතිරික්ත වේ (3) s_clientසේවාදායක සහතිකය නිවැරදිව දේශීය විශ්වාසනීය නැංගුරමකට (මූලයට) දම්වැල් කර ඇති බව සනාථ කරයි. මෙය පෙන්වන තොරතුරු යටපත් කර ඇත (4) එය අවලංගු කිරීමක් සඳහා පරීක්ෂා නොකරයි (5) එය සේවාදායක සහතිකයේ නම 1.0.2 දී පමණක් පරික්ෂා කරයි, පසුව පෙරනිමියෙන් නොවේ (නමුත් සහතිකය දෙස බැලීමෙන් ඔබට එය පහසුවෙන්ම පරීක්ෂා කළ හැකිය. පසුව)
dave_thompson_085

@ dave_thompson_085, ප්‍රශ්නය වන්නේ සහතිකය බාගත කරන්නේ කෙසේද යන්නයි, නමුත් දාම තොරතුරු පෙන්වන්නේ නැත. මම කැමතියි opensl x509 වෙනත් පිළිතුරක sed ට වඩා හොඳයි.
ඩර්_මයිස්ටර්

මෙය පිළිවෙලට වැඩ කරයි, tks
datdinhquoc

වැඩ කරන නමුත් එය මට පැරණි සහතිකය ලබා දෙයි, gnutls-cli වඩා හොඳින් භාවිතා කරන්න
datdinhquoc

1
atdatdinhquoc විවිධ සහතික ලබා දී තිබේද? එක් මෙවලමක් පළමු x509 සහතිකය නැවත ලබා දෙන බව මම අනුමාන කරමි. gnutls-cliමගේ අත්දැකීම් අනුව සියලුම සහතික ලබා දී ඇති බව පෙන්නුම් කරයි, opensl ද එසේ කරනු ඇතැයි මම බලාපොරොත්තු වෙමි. බහුවිධ සහතික හැසිරවීමේදී එය ව්‍යාකූල විය හැකිය, ඔබට පයිතන් තිබේ නම්, මට මෙහි x509- ලෝඩරයක්
ThorSummoner

9

@ බිග්නෝස් පිළිතුර මත පදනම්ව, මෙන්න ස්වයං අන්තර්ගත අනුවාදයක් වන අතර එය හොඳින් ගැලපේ. උදා: සූපවේදී වට්ටෝරුව:

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

0

Ex සහ ක්‍රියාවලි ආදේශනය භාවිතා කරන විකල්ප සින්ටැක්ස්:

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq > file.crt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.