কমান্ড লাইনের মাধ্যমে কীভাবে SSL ফিঙ্গারপ্রিন্ট যাচাই করবেন? (উইজেট, কার্ল, ...)


32

একটি কমান্ড লাইন ওয়েবসাইট ডাউনলোডার ব্যবহার করে যেমন wget, curlবা অন্য যে কোনও ... স্ক্রিপ্টে ...

আমার কাছে একটি ওয়েবসাইটের SHA-1 এবং SHA-256 সার্টিফিকেট ফিঙ্গারপ্রিন্ট রয়েছে। সুরক্ষা উদ্বেগের কারণে ( 1 ) ( 2 ), আমি পাবলিক এসএসএল শংসাপত্রের কর্তৃপক্ষ সিস্টেমটি ব্যবহার করতে চাই না। ফিঙ্গারপ্রিন্ট অবশ্যই শক্ত কোডিং করা উচিত।

অ্যাপ্লিকেশনের মতো কোনও উইজেট এসএসএল ফিঙ্গারপ্রিন্টটি পরীক্ষা করতে পারে?

উইজেটের এমন কার্যকারিতা নেই। ( 3 )

ব্যবহার wget --ca-certificateবা curl --cacertআমাকে নিজের স্থানীয় শংসাপত্র কর্তৃপক্ষ চালাতে হবে, যা আমি প্রতিরোধ করতে চাই, কারণ এটি অনেক জটিলতা যুক্ত করে adds এটি অত্যন্ত জটিল এবং এটি আগে কেউ করেনি। ( 4 )

এর মতো কোনও সরঞ্জাম নেই
download --tlsv1 --serial-number xx:yy:zz --fingerprint xxyyzz https://site.com?

সমাধান অবশ্যই অবশ্যই টেকটিউ-এর পক্ষে ঝুঁকিপূর্ণ নয়। ( ) এমআইটিএম ওপেনসেল ক্লায়েন্টের অনুরোধের জন্য একটি বৈধ ফিঙ্গারপ্রিন্ট ফিরিয়ে দিতে এবং নীচের উইজেটের অনুরোধের সাথে ছত্রভঙ্গ করতে পারে।


: সম্ভবত যেমন কিছু দ্বারা OpenSSL যাদু যা করতে হবে cyberciti.biz/faq/...
জাস্টিন Andrusk

দর্শনার্থী: নোট করুন যে এটি ইনফোজেক এসইতে ক্রস পোস্ট করা হয়েছিল । একটি স্ব-উত্তর সেখান থেকে অনুলিপি করা হয়েছিল। এটি বিজেডডব্লিউ-এর আচরণ
ফলিক্স সাপারেলি

উত্তর:


31

সূত্র

প্রয়োজনীয় সফ্টওয়্যার ইনস্টল করুন:

apt-get install ca-certificates curl

সর্বজনীন এসএসএল শংসাপত্র ডাউনলোড করুন:

openssl s_client -connect torproject.org:443 -CAfile /usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_CA.crt >./x.cert </dev/null

বা আরও ভাল:

echo -n | openssl s_client -connect torproject.org:443 -CAfile /usr/share/ca-certificates/mozilla/DigiCert_Assured_ID_Root_CA.crt | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ./torproject.pem

SHA-1 ফিঙ্গারপ্রিন্ট পান:

openssl x509 -noout -in torproject.pem -fingerprint -sha1

SHA-256 ফিঙ্গারপ্রিন্ট পান:

openssl x509 -noout -in torproject.pem -fingerprint -sha256

ম্যানুয়ালি SHA-1 এবং SHA-256 ফিঙ্গারপ্রিন্টগুলি torproject.org এফএকিউ: এসএসএলের সাথে তুলনা করুন ।

.

Testingচ্ছিকভাবে পরীক্ষার উদ্দেশ্যে সিএ-শংসাপত্রগুলি বেহুদা রেন্ডার করুন। এখানে কার্ল ব্যবহার করে তবে উইজেটে একটি বাগ বাগ রয়েছে এবং সে যাইহোক সিএ-ফাইলগুলি ব্যবহার করে।

sudo mv /usr/share/ca-certificates /usr/share/ca-certificates_

কার্ল এবং পিনযুক্ত শংসাপত্র সহ ডাউনলোড করুন:

curl --cacert ./torproject.pem https://check.torproject.org/ > check.html

এটি প্রক্সিটির উপস্থিতিতে কাজ করে না, যদিও: - /
ফ্রেডেরিক নর্ড

দয়া করে মনে রাখবেন যে-উদাহরণস্বরূপ-CAfile বিকল্পটি সম্পূর্ণ উপেক্ষা করা হবে।
লার্স


10

এটিও যথেষ্ট:

openssl x509 -fingerprint -in server.crt

-md5MD5 ফিঙ্গারপ্রিন্ট পুনরুদ্ধার করতে বিকল্প যুক্ত করুন । -md5মধ্যে রাখা না -inএবং server.crt
35 皞

4

opensslকমান্ড এবং এর ক্লায়েন্টের কার্যকারিতা নিয়ে এটি করা মোটামুটি সহজ ।

নিম্নলিখিত লিখিত স্ক্রিপ্ট একটি প্রদত্ত ডোমেন (কোনও https উপসর্গ নয়) এবং একটি SHA-1 ফিঙ্গারপ্রিন্ট গ্রহণ করবে এবং পুনরুদ্ধার করা আঙুলের ছাপ মিললে কোনও ত্রুটি (0) ছাড়াই প্রস্থান করবে, কিন্তু কোনও মিল না থাকলে প্রস্থান কোড 1 সহ। তারপরে আপনি কেবলমাত্র সর্বশেষ প্রস্থান কোডটি পরীক্ষা করে এটি আপনার স্ক্রিপ্টে অন্তর্ভুক্ত করতে পারেন $?:

#! / বিন / ব্যাশ
এফপিআরআইএনটি = cho প্রতিধ্বনিত | openssl s_client- সংযুক্ত করুন $ 1: 443 2> / dev / নাল \ | ওপেনএসএল x509 -নাআউট -ফিংগারপ্রিন্ট | কাট -f2 -d '=' ` যদি ["$ 2" = "$ FPRINT"]; তারপর প্রস্থান 0 আর প্রস্থান 1 ফাই

এটি টেকটিউতে ঝুঁকিপূর্ণ। [1] এমআইটিএম ওপেনসেল ক্লায়েন্টের অনুরোধের জন্য একটি বৈধ ফিঙ্গারপ্রিন্ট ফিরিয়ে দিতে এবং নীচের উইজেটের অনুরোধের সাথে টেম্পার করতে পারে। [1] en.wikedia.org/wiki/Time_of_check_to_Time_of_use
জেমস মিচ

সত্য, তাত্ত্বিকভাবে। wgetওপেনএসএসএল দিয়ে এটিকে সংশোধন ও সংকলন করা মোটামুটি সহজ হবে যাতে আপনি ইনলাইনটি যা চান তা সম্পাদন করে তবে এটি কোনও এਯੂ উত্তরের সুযোগের বাইরে।
ইশ

সুতরাং, ডকুমেন্টটি পুনরুদ্ধার করতে s_client ব্যবহার সম্পর্কে কীভাবে? কিছু (echo -ne "Host: ${HOST}\n\rGET ${URL}\n\r" && yes) 2>/dev/null | openssl s_client -connect ${HOST}:443কাজ করা উচিত, না? ঠিক আছে, আপনাকে আসল সামগ্রীর জবাব থেকে এসএসএল সেশন তথ্য বিভক্ত করতে হবে।
টানেলি

3

সূত্র

#!/usr/bin/perl
# https://security.stackexchange.com/questions/20399/how-to-verify-the-ssl-fingerprint-by-command-line-wget-curl
# Code snippets taken from Net::SSLeay documentation and mildly modified.
# Requires a newer version of SSLeay (tested with 1.48)
# Needless to say, verify correct $host and $fingerprint before testing!!!

use Net::SSLeay qw(get_https3);

$host = "www.google.com";
$port = 443;
$fingerprint = "C1:95:6D:C8:A7:DF:B2:A5:A5:69:34:DA:09:77:8E:3A:11:02:33:58";

($p, $resp, $hdrs, $server_cert) = get_https3($host, $port, '/');
if (!defined($server_cert) || ($server_cert == 0)) {
    warn "Subject Name: undefined, Issuer  Name: undefined";
} elsif (Net::SSLeay::X509_get_fingerprint($server_cert, "sha1") ne $fingerprint) {
    warn 'Invalid certificate fingerprint '
        .  Net::SSLeay::X509_get_fingerprint($server_cert, "sha1")
        . ' for ' . Net::SSLeay::X509_NAME_oneline(
             Net::SSLeay::X509_get_subject_name($server_cert));
} else {
    print $p;
}

নেট :: এসএসএল ডকুমেন্টেশনে যেমন বর্ণিত হয়েছে, এই পদ্ধতিটির অর্থ এইচটিটিপি লেনদেনের পরে যাচাইকরণ করা হয়, এবং তাই যদি আপনি তাদের ডেটা প্রেরণের আগে সঠিক সার্ভারের সাথে কথা বলছেন যাচাই করতে চান তবে এটি ব্যবহার করা উচিত নয়। তবে আপনি যা করছেন তা যদি আপনি সিদ্ধান্ত নিচ্ছেন যে আপনি সবেমাত্র ডাউনলোড করেছেন তার উপর নির্ভর করবেন কিনা (যা মনে হচ্ছে আপনার রেফারেন্স # 4 থেকে এসেছে) এটি ঠিক আছে।


1

এটি আমার প্রতিদিনের লিপি:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

Ouput:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.