ایجاد یک گواهینامه خود امضا شده و تأیید کلید و گواهینامه خصوصی

سلام همه
من می خواستم یکی از موضوعاتی را که این هفته در محل کار با آن روبرو شدم به اشتراک بگذارم و مراحلی که برای اشکال زدایی این مسائل انجام دادم. این مسئله بیشتر حول محور کلیدی که در برنامه خود استفاده می کنیم ، می چرخید و این یک مسئله ساده بود که ما را حدود دو روز طول کشید تا بفهمیم. این یک مسئله ساده بود که در آن ما از کلید خصوصی اشتباه و ترکیب گواهی استفاده کردیم و با LED به دو روز کار غیر ضروری نادیده گرفته شد. من در حال به اشتراک گذاشتن برخی از مراحلی که برای کشف آن انجام دادم که می تواند دفعه بعد برای شما مفید باشد. من در حال نوشتن این پست به عنوان دو بخش هستم.
- قسمت 1: شما گواهینامه های SSL خود را ایجاد می کنید
- قسمت 2: شما گواهی را اشکال زدایی می کنید تا ببینید که آیا PK و CERT مطابقت دارند
قسمت 1: ایجاد گواهینامه امضا شده خودم
ایجاد یک کلید خصوصی
- برای ایجاد یک کلید خصوصی جدید در قالب PKCS#1 دستور زیر را اجرا کنید
# openssl genrsa -des3 -out key_name.key key_strength
openssl genrsa -des3 -out private_key.key 2048
ایجاد درخواست امضای گواهی
- برای ایجاد یک درخواست جدید گواهینامه امضای با کلید خصوصی فوق دستور زیر را اجرا کنید
# openssl genrsa -des3 -out key_name.key key_strength
openssl req -new -key private_key.key -out certificate_signing_request.csr
توجه: درخواست امضای گواهینامه شما گواهی واقعی شما نیست. این فقط حاوی اطلاعاتی است که برای تولید گواهی بر اساس کلید خصوصی شما لازم است
ایجاد گواهی
- دستور زیر را برای دریافت گواهی از CSR که در بالا ایجاد کردیم ، اجرا کنید
openssl x509 -req -in certificate_signing_request.csr -signkey private_key.key -out certificate.crt
ایجاد یک کلیدی در خارج از JKS
به منظور اضافه کردن گواهینامه ها به یک فروشگاه کلید ، دستور زیر لازم است
- گواهی و کلید خصوصی خود را به یک پرونده PKCS12 (.p12 از .pfx) با استفاده از دستور زیر تبدیل کنید
openssl pkcs12 -export -out keystore_pkcs.p12 -inkey private_key.key -in certificate.crt -name "faustus" -password pass:bulgogi
- پس از ایجاد PKCS می توانیم JKS را با استفاده از دستور زیر از آن ایجاد کنیم
keytool -importkeystore -srckeystore keystore_to_test.p12 -srcstoretype PKCS12 -srcalias faustus -srcstorepass bulgogi2902 -destkeystore dest_ks.jks -deststoretype JKS -deststorepass bulgogi2902 -destalias fausto
- کلید اصلی را می توان با دستور زیر بررسی کرد تا محتویات را لیست کند
keytool -list -v -keystore dest_ks.jks -storepass bulgogi2902
قسمت 2: اعتبارسنجی گواهینامه های SSL
بررسی کلید خصوصی
openssl rsa -in [key-file.key] -check -noout
دستور فوق به ما این امکان را می دهد که آیا کلید خصوصی با آن دستکاری شده است
برخی از پاسخ های معیوب هستند
- خطای کلید RSA: P نخست نیست
- خطای کلید RSA: N با PQ برابر نیست
- خطای کلید RSA: De با 1 متناسب نیست
- خطای کلید RSA: DMP1 متناسب با D نیست
- خطای کلید RSA: IQMP معکوس Q نیست
آیا کلید خصوصی با ما دستکاری نشده است می توانیم پاسخ زیر را بدست آوریم
- کلید RSA خوب
تطبیق مقدار مدول با کلید خصوصی و جفت کلید گواهی SSL/TLS را تأیید کنید
مدول کلید خصوصی و گواهی باید دقیقاً مطابقت داشته باشد
برای مشاهده مدول گواهی
openssl x509 -noout -modulus -in [certificate-file.cer]
برای مشاهده مدول کلید خصوصی
openssl rsa -noout -modulus -in [key-file.key]
رمزگذاری را با کلید عمومی از گواهینامه و رمزگشایی با کلید خصوصی انجام دهید
- کلید عمومی را از گواهی دریافت کنید
openssl x509 -in [certificate-file.cer] -noout -pubkey > certificatefile.pub.cer
- رمزگذاری محتوای پرونده Test.txt با استفاده از کلید عمومی. با محتوا یک فایل جدید به نام test.txt ایجاد کنید “تست پیام“. دستور زیر را انجام دهید یک پیام رمزگذاری شده ایجاد کنید به پرونده cipher.txt.
openssl pkeyutl -encrypt -in test.txt -pubin -inkey certificatefile.pub.cer -out cipher.txt
- با استفاده از کلید خصوصی از cipher.txt رمزگشایی کنید
openssl pkeyutl -decrypt -in cipher.txt -inkey [key-file.key]
- تأیید یکپارچگی پرونده ای که با کلید خصوصی امضا شده است. دستور زیر را برای امضای پرونده test.sig و test.txt با کلید خصوصی خود انجام دهید
openssl dgst -sha256 -sign [key-file.key] -out test.sig test.txt
پرونده های امضا شده را با کلید عمومی خود که از مرحله استخراج شده است ، تأیید کنید 1. کلید عمومی را از گواهی دریافت کنید.
openssl dgst -sha256 -verify certificatefile.pub.cer -signature test.sig test.txt
خروجی از ترمینال باید پیام زیر را نشان دهد
تأیید شده خوب
آیا کلید خصوصی با پیام زیر دستکاری شده است
عدم تأیید
مانند اکثر پست ، این فقط اطلاعاتی است که من از منبع مختلف تا یک پست تهیه کرده ام تا بتواند یک فروشگاه یک توقف باشد. امیدوارم این به شما کمک کند تا مسائل را حل کنید یا حداقل شما را در مسیر درست قرار دهید.