সমস্যাটি হচ্ছে, এটি openssl -verify
কাজটি করে না।
প্রিয়াদি যেমন উল্লেখ করেছেন , openssl -verify
প্রথমে স্ব স্বাক্ষরিত শংসাপত্রের স্টপেজ থামায়, তাই আপনি সত্যিকার অর্থে চেইনটি যাচাই করেন না, কারণ প্রায়শই মধ্যবর্তী সার্টিটি স্ব-স্বাক্ষরিত হয়।
আমি ধরে নিয়েছি যে আপনি 101% নিশ্চিত হতে চান, আপনি যে উত্পাদনশীল ওয়েব পরিষেবাতে ইনস্টল করার চেষ্টা করার আগে শংসাপত্র ফাইলগুলি সঠিক are এখানে এই রেসিপিটি ঠিক এই প্রাক-বিমান-চেকটি সম্পাদন করে।
দয়া করে নোট করুন যে পিটারের উত্তরটি সঠিক , তবে এর ফলাফল আউটপুটে openssl -verify
কোনও ধারণা নেই যে পরে সমস্ত কিছু সত্যই কার্যকর হয়। হ্যাঁ, এটি কিছু সমস্যা খুঁজে পেতে পারে তবে বেশিরভাগ ক্ষেত্রেই তা নয়।
এখানে একটি স্ক্রিপ্ট যা আপনি অ্যাপাচে ইনস্টল করার আগে একটি শংসাপত্র শৃঙ্খলা যাচাই করার কাজ করে। সম্ভবত এটি আরও কিছু মরমী ওপেনএসএসএল যাদু দ্বারা বাড়ানো যেতে পারে তবে আমি কোনও ওপেনএসএসএল গুরু এবং নিম্নলিখিত রচনাগুলি নই:
#!/bin/bash
# This Works is placed under the terms of the Copyright Less License,
# see file COPYRIGHT.CLL. USE AT OWN RISK, ABSOLUTELY NO WARRANTY.
#
# COPYRIGHT.CLL can be found at http://permalink.de/tino/cll
# (CLL is CC0 as long as not covered by any Copyright)
OOPS() { echo "OOPS: $*" >&2; exit 23; }
PID=
kick() { [ -n "$PID" ] && kill "$PID" && sleep .2; PID=; }
trap 'kick' 0
serve()
{
kick
PID=
openssl s_server -key "$KEY" -cert "$CRT" "$@" -www &
PID=$!
sleep .5 # give it time to startup
}
check()
{
while read -r line
do
case "$line" in
'Verify return code: 0 (ok)') return 0;;
'Verify return code: '*) return 1;;
# *) echo "::: $line :::";;
esac
done < <(echo | openssl s_client -verify 8 -CApath /etc/ssl/certs/)
OOPS "Something failed, verification output not found!"
return 2
}
ARG="${1%.}"
KEY="$ARG.key"
CRT="$ARG.crt"
BND="$ARG.bundle"
for a in "$KEY" "$CRT" "$BND"
do
[ -s "$a" ] || OOPS "missing $a"
done
serve
check && echo "!!! =========> CA-Bundle is not needed! <========"
echo
serve -CAfile "$BND"
check
ret=$?
kick
echo
case $ret in
0) echo "EVERYTHING OK"
echo "SSLCertificateKeyFile $KEY"
echo "SSLCertificateFile $CRT"
echo "SSLCACertificateFile $BND"
;;
*) echo "!!! =========> something is wrong, verification failed! <======== ($ret)";;
esac
exit $ret
নোট করুন যে আউটপুটটির পরে EVERYTHING OK
আপাচি সেটিং, কারণ ব্যবহারকারীরা NginX
বা haproxy
সাধারণত লোকেরা এটিকে পুরোপুরি পড়তে এবং বুঝতে পারে))
এর একটি গিটহাব গিস্ট রয়েছে যার কিছুটা আপডেট থাকতে পারে
এই স্ক্রিপ্টের পূর্বশর্ত:
/etc/ssl/certs
উবুন্টুতে উদাহরণস্বরূপ আপনার কাছে বিশ্বাসযোগ্য সিএ রুট ডেটা রয়েছে
DIR
আপনি যেখানে 3 টি ফাইল সঞ্চয় করেন সেখানে একটি ডিরেক্টরি তৈরি করুন :
DIR/certificate.crt
যা শংসাপত্র রয়েছে
DIR/certificate.key
এতে আপনার ওয়েবসার্ভিসের গোপন কী রয়েছে (পাসফ্রেজ ছাড়াই)
DIR/certificate.bundle
যার মধ্যে সিএ-বান্ডিল রয়েছে। কীভাবে বান্ডিল প্রস্তুত করবেন, নীচে দেখুন।
- এখন স্ক্রিপ্টটি চালান:
./check DIR/certificate
(এটি অনুমান করে যে check
বর্তমানের ডিরেক্টরিতে স্ক্রিপ্টটির নাম দেওয়া হয়েছে)
- স্ক্রিপ্টটি আউটপুট করে এমন একটি খুব সম্ভাব্য কেস নেই
CA-Bundle is not needed
। এর অর্থ হ'ল আপনি (পড়ুন /etc/ssl/certs/
:) ইতিমধ্যে স্বাক্ষর শংসাপত্রকে বিশ্বাস করে। তবে ডাব্লুডাব্লুডাব্লু-র ক্ষেত্রে এটি অত্যন্ত সম্ভাবনা নয়।
- এই পরীক্ষা পোর্টটির জন্য 4433 অবশ্যই আপনার ওয়ার্কস্টেশনে অব্যবহৃত থাকতে হবে। এটি কেবলমাত্র নিরাপদ পরিবেশে এটি চালান, কারণ এটি জনসাধারণের জন্য শীঘ্রই 4433 বন্দরটি খোলে, যা প্রতিকূল পরিবেশে বিদেশী সংযোগগুলি দেখতে পাবে।
কিভাবে certificate.bundle
ফাইল তৈরি করবেন ?
ডাব্লুডাব্লুডাব্লুতে ট্রাস্ট চেইন সাধারণত:
- থেকে বিশ্বস্ত শংসাপত্র
/etc/ssl/certs
- অজানা মধ্যবর্তী শংসাপত্র (গুলি), সম্ভবত অন্য সিএ স্বাক্ষরিত ক্রস
- আপনার শংসাপত্র (
certificate.crt
)
এখন, মূল্যায়নটি নীচ থেকে উপরের দিকে সঞ্চালিত হয়, এর অর্থ, প্রথমে আপনার শংসাপত্রটি পড়ে, তারপরে অজানা মধ্যবর্তী শংসাপত্রের প্রয়োজন হয়, তারপরে সম্ভবত ক্রস-সাইনিং-শংসাপত্র এবং তারপরে /etc/ssl/certs
যথাযথ বিশ্বস্ত শংসাপত্রটি সন্ধানের জন্য পরামর্শ নেওয়া হয়।
সিএ-বান্ডেলটি অবশ্যই সঠিকভাবে প্রক্রিয়াকরণের অর্ডারে তৈরি করা উচিত, এর অর্থ, প্রথম প্রয়োজনীয় শংসাপত্র (মধ্যবর্তী শংসাপত্র যা আপনার শংসাপত্রকে স্বাক্ষর করে) বান্ডেলে প্রথমে আসে। তারপরে ক্রস-সাইনিং-সার্টের দরকার।
সাধারণত আপনার সিএ (আপনার শংসাপত্রে স্বাক্ষরকারী কর্তৃপক্ষ) ইতিমধ্যে ইতিমধ্যে এমন একটি উপযুক্ত সিএ-বান্ডিল-ফাইল সরবরাহ করবে। যদি তা না হয় তবে আপনাকে প্রয়োজনীয় সকল অন্তর্বর্তী শংসাপত্রগুলি cat
একত্রে একটি ফাইলে (ইউনিক্সে) বাছাই করতে হবে। উইন্ডোজ এ আপনি কেবল একটি পাঠ্য সম্পাদক খুলতে পারেন (যেমন notepad.exe
) এবং ফাইলগুলিতে শংসাপত্রগুলি পেস্ট করতে পারেন, প্রথমে শীর্ষে প্রয়োজন হয় এবং অন্যদের অনুসরণ করে।
আরও একটি জিনিস আছে। ফাইলগুলি পিইএম ফর্ম্যাটে থাকা দরকার। কিছু সিএ ডিইআর (একটি বাইনারি) ফর্ম্যাট দেয়। পিইএম স্পট করা সহজ: এটি ASCII পাঠযোগ্য। কীভাবে কোনও কিছুকে পিইএম-তে রূপান্তর করতে হয় তার জন্য, দেখুন .crt .pem তে রূপান্তর করতে এবং হলুদ ইটের রাস্তাটি অনুসরণ করুন।
উদাহরণ:
তোমার আছে:
intermediate2.crt
অন্তর্বর্তী সার্ট যা আপনার স্বাক্ষর করেছে certificate.crt
intermediate1.crt
আর একটি মধ্যবর্তী সার্ট, যা গেয়েছে ged intermediate2.crt
crossigned.crt
যা অন্য সিএর ক্রস স্বাক্ষরকারী শংসাপত্র, যা স্বাক্ষর করেছে intermediate1.crt
crossintermediate.crt
যা অন্য সিএ স্বাক্ষরিত অন্য একটি মধ্যবর্তী যা crossigned.crt
আপনি সম্ভবত কখনও কখনও দেখবেন না)
তারপরে যথাযথটি cat
দেখতে এটির মতো হবে:
cat intermediate2.crt intermediate1.crt crossigned.crt crossintermediate.crt > certificate.bundle
এবং কীভাবে আপনি খুঁজে পেতে পারেন যে কোন ফাইলগুলির প্রয়োজন আছে বা না এবং কোন অনুক্রমে?
ঠিক আছে, পরীক্ষা করুন, যতক্ষণ না check
আপনাকে সমস্ত কিছু ঠিক আছে। ধাঁধা সমাধান করার জন্য এটি একটি কম্পিউটার ধাঁধা গেমের মতো। প্রতি. একক। সময়। এমনকি উপকারের জন্যও। প্রতিবার এটি করার দরকার পরে আপনি আরও ভাল হয়ে যাবেন। সুতরাং আপনি সমস্ত ব্যথা সঙ্গে অবশ্যই একা নন। এটি এসএসএল, তুমি জানো? এসএসএল সম্ভবত 30 বছরেরও বেশি সময় ধরে পেশাদার সিস্টেম প্রশাসনের মধ্যে দেখা সবচেয়ে খারাপ ডিজাইন। কখনও ভেবে দেখেছেন কেন গত 30 বছরে ক্রিপ্টো মূলধারায় পরিণত হয়নি? এই জন্য. 'নফ বলল।
man verify
আমি দেখতে পেলাম যে-untrusted
মধ্যবর্তী শংসাপত্র উল্লেখ করার সময় প্যারামিটারটি সঠিকভাবে ব্যবহার করা উচিত।