openssl یکی از متنوع ترین ابزارهای ssl می باشد که برای پیاده سازی پروتکل های ssl استفاده می شود و نسخه های مختلفی برای platform (سکو ها) وجود دارد از جمله لینوکس،ویندوز و مک.
شکل کلی دستور:
$ openssl command [ command_opts ] [ command_args ] $ openssl [ list-standard-commands | list-message-digest-commands | list-cipher-commands | list-cipher-algorithms | list-message-digest-algorithms | list-public-key-algorithms] $ openssl no-XXX [ arbitrary options ]
نکته مهم:حتماً برای تسلط و آشنایی دقیق با این مفاهیم ذکر شده ابتدا باید به لینک های مفید داده شده در پایین مراجعه کنید و سپس این صفحه را مطالعه کنید که به علت طولانی بودن مطالب مذکور در حوصله این صفحه نمی گنجید.
openssl یکی از متنوع ترین ابزارهای ssl می باشد که برای پیاده سازی پروتکل های ssl استفاده می شود و نسخه های مختلفی برای platform (سکو ها) وجود دارد از جمله لینوکس،ویندوز و مک.
نکته:در اصل OpenSSL یک ابزار برای پیاده سازی پروتکل های شبکه ای (Secure Sockets Layer (SSL v2/v3 و (Transport Layer Security (TLS v1 می باشد
این دستور دارای چندین تابع مختلف می باشد که به شما اجازه میدهد:
- دستور OpenSSL معمولا برای تولید Certificate Signing Request) csr) و private key (کلید خصوصی) برای سکو های محتلفی از جمله آپاچی به کار برود.
- امکان دیدن جزئیات CSR یا گواهینامه (certificate)
- مقایسه کلید خصوصی و MD5 hash یک گواهینامه به منظور اینکه ببینیم آیا یکسان هستند یا خیر؟
- امکان اینکه ایا یک گواهینامه به درستی در وبسایت نصب شده است.
- تبدیل گواهینامه به یک فرمت دیگر.
- تولید و مدیریت private keys و public keys و parameters
- رمزنگاری کلید عمومی-Public key cryptographic
نکته:برای اطلاعات بیشتر و آشنایی در مورد عملکرد فوق بهتر است به لینک متناظر داده شده در پایین مراجعه کنید.
- تولید گواهینامه های X.509 و CSR و CRL
- رمز نگاری و رمز گشایی به کمک Ciphers
- امکان آزمودن SSL/TLS در کلاینت و سرور
- رسیدگی امضای S/MIME یا رمز نگاری ایمیل
- تولید و بررسی Timestamp request
- محاسبه MD5
چند نکته:
- استاندارد S/MIME در پاسخ به معرفی استاندارد PGP معرفی شده است و با S/MIME امکان اعتبارسنجی،احراز هویت نامه ها،رمزنگاری و غیر قابل انکار رفتن هر نامه تضمین شده است
- استاندارد S/MIME بر خلاف PGP فشرده سازی پیام ها را انجام نمی دهد و از وظایف خود نمی داند ولی PGP این کار را انجام می دهد
- استاندارد PGP برای استفاده شخصی بسیار رایج و محبوب است ولی استاندارد S/MIME عموما برای کاربردهای سازمانی مورد استفاده قرار می گیرد و انعطاف پذیری بیشتری دارد.
پارامترها:
version
:نمایش نسخه جاری و موجود بروی سیستم
$ openssl version
a-:
اگر قصد دارید تا اطلاعات بیشتری را پیدا کنید
< pre class="screen"> $ openssl version -a
help
:نمایش لیست دستورات موجود
نکته:دستورات به کمک پارامتر help
در 3 بخش به نام های Standard commands,Message Digest commands ,Cipher commands تقسیم بندی می شوند.
نکته:در ادامه پس از اجرای دستور فوق در جلوی 2 دسته بندی دستورات ما را راهنمایی کرده که برای اطلاعات بیشتر از دستورات پیشتهادی (dgst و enc) استفاده کنیم.
پس برای کسب اطلاعات بیشتر در مورد Message Digest commands باید dgst را به کار ببریم و برای کسب اطلاعات بیشتر در مورد Cipher commands باید enc را به کار ببریم.
نکته:پارامتر h-
وجود خارجی ندارد و ما عمداً به کار می بریم تا به کمک این حقه پارامتر های واقعی دستور را ببینیم:
dotnet@dotnet-V:~$ openssl dgst -h unknown option '-h' options are -c to output the digest with separating colons -r to output the digest in coreutils format -d to output debug info -hex output as hex dump -binary output in binary form
به اولین خط پس از اجرای دستور نگاه کنید.(خروجی به صورت محدود قرار داده شده است)
دقیقاً همانند بالا این بار برای Cipher commands استفاده می کنیم.
dotnet@dotnet-V:~$ openssl enc -h unknown option '-h' options are -in <file> input file -out <file> output file -pass <arg> pass phrase source -e encrypt -d decrypt
ciphers
:نمایش تمام ciphersهای موجود
dotnet@dotnet-V:~$ openssl ciphers -v ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
نکته:خروجی دستور بصورت محدود می باشد.
اگر قصد پالایش نوع خاصی را دارید نام آن را جلوی دستور بنویسید
$ openssl ciphers -v -tls1
اگر قصد دارید لیست ciphersبا قدرت رمزنگاری بالا (پیچیده تر) را ببینید
dotnet@dotnet-V:~$ openssl ciphers -v 'HIGH' ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
نکته:خروجی فقط برای الگوریتم هایی است که key انها بیشتر از 128بیت باشد.
می توانیم به صورت ترکیبی هم از دستور استفاده کنیم مثلا برای پیدا کردن ciphersهایی با رمزنگاری پیچیده تر که از الگوریتم AES استفاده می کنند
dotnet@dotnet-V:~$ openssl ciphers -v 'AES+HIGH' ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384 ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384 ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1 ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1 SRP-DSS-AES-256-CBC-SHA SSLv3 Kx=SRP Au=DSS Enc=AES(256) Mac=SHA1 SRP-RSA-AES-256-CBC-SHA SSLv3 Kx=SRP Au=RSA Enc=AES(256) Mac=SHA1 DHE-DSS-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=DSS Enc=AESGCM(256) Mac=AEAD
speed
:این پارامتر محکی- benchmark برای اندازه گیری کارایی سیستم شما فراهم می کند.
نکته:عمل benchmark بیانگر تعداد عملیات قابل اجرا در یک زمان بخصوص/تعیین شده است نه اینکه یک تعداد عملیات داده شده در چه زمانی طول می کشد!
dotnet@dotnet-V:~$ openssl speed Doing md4 for 3s on 16 size blocks: 6718893 md4's in 2.95s Doing md4 for 3s on 64 size blocks: 5893107 md4's in 2.99s Doing md4 for 3s on 256 size blocks: 3801768 md4's in 2.98s
dotnet@dotnet-V:~$ openssl speed rsa Doing 512 bit private rsa's for 10s: 34608 512 bit private RSA's in 9.90s Doing 512 bit public rsa's for 10s: 433885 512 bit public RSA's in 9.97s Doing 1024 bit private rsa's for 10s: 7037 1024 bit private RSA's in 9.96s Doing 1024 bit public rsa's for 10s: 133288 1024 bit public RSA's in 9.97s
دستور اول برای محک کارایی سیستم است و دستور دوم برای محک اگوریتم rsa می باشد.
مثال:تولید یک درخواست گواهی امضا-Certificate Signing Request یا CSR
اگر قصد دریافت گواهینامه SSL و key (جهت استفاده در سرور httpd) را دارید ابتدا باید یک CSR را تولید کنید و ان را به یک Certificate Authority -CA تجاری ارسال کنید که متناسب و در پاسخ به CSR ارسال شده شما،گواهینامه SSL مناسب را به شما ارسال می کنند.
که برای تولید CSR در خط فرمان دستور زیر را تایپ می کنیم:
dotnet@dotnet-V:~$ openssl req -new -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcsr.pem
Generating a 1024 bit RSA private key
.......................................++++++
...............................................................................................................++++++
writing new private key to 'hostkey.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ir
State or Province Name (full name) [Some-State]:Quom
Locality Name (eg, city) []:Quom
Organization Name (eg, company) [Internet Widgits Pty Ltd]:irani
Organizational Unit Name (eg, section) []:tester
Common Name (e.g. server FQDN or YOUR name) []:www.30li.ir
Email Address []:youremail@mailserver.ir
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:passwords
An optional company name []:web1
پارمترهای دستور فوق عبارتند از:
new-
:تولید یک CSR جدید
newkey rsa:1024-
:تولید یک private key برای الگوریتم رمز نگاری RSA بطول 1024 بایت
نکته:طول کلید قابل تغییر است و حداقل512 است ولی اکثر مردم علاقه دارند به منظور امنیت بیشتر از طول2048 استفاده کنند.
keyout hostkey.pem-
:کلیدخصوصی-private key جدید الگوریتم RSA را در این فایل ذخیره میکند.
nodes-
:یک پارامتر اختیاری است که باعث جلوگیری از رمزنگاری کلید خصوصی می شود.
نکته:در صورت حذف این پارامتر کلید خصوصی رمز نگاری می شود لازم است در هر بار راه اندازی مجدد وب سرور نیاز به وارد کردن پسورد داشته باشیم لذا برای جلوگیری از این دردسر آپشن موردنظر را به کار میبرند.
out hostcsr.pem-
:این دستور CSR تولیدی را در فایل hostcsr.pem می نویسد.
در ادامه چند سوال ساده از شما پرسیده می شود که باید به آن جواب بدهید و در نهایت فایل ساخته می شود.
نکته مهم:اگر به بخش آبی دقت کنید در واقع این فایل حاوی private key یا کلید خصوصی است.
چند نکته:
- این همان فایلی است که شما باید به ارایه دهنده SSL (شرکت های Certificate Authority -CA ) ارسال کنید.در ادامه لیست بعضی از شرکت های مشهور CA که وظیفه صدور گواهینامه ها را بر عهده دارند عبارتند از:1-verisign و 2-Comodo-3 Entrust و ...
- اگر قصد استفاده از CSR را برای تولید گواهینامه توسط خودتان دارید در وارد کردن بخش fully qualified domain name-FQDN دقت کنید مثلا در مثال فوق من هیچ زیر دامنه ای ندارم لذا FQDN برای من همان www.30li.ir خواهد بود و اگر برای یک زیر دامنه قصد انجام چنین کاری داشته باشم FQDN مثلا چیزی مانند login.30li.ir خواهد بود در صورتی که این بخش کامل نباشد کلاینت ها در ارتباط با سرور دچار مشکل خواهند شد. آشنایی با FQDN
- دقت کنید در انتهای نشست تولید CSR یک بخش اختیاری وجود دارد که اگر قصد دارید CSR را برای شرکت های CA ارسال کنید برای بعضی از این شرکت ها این بخش لازم خواهد بود.
مثال:ساخت self-signed certificate با داشتن یک Certificate Signing Request یا CSR
دقت کنید در این مثال ما CSR را در اختیار داریم یعنی در یک فایل به نام hostcsr.pem ذخیره شده (به مثال قبل دقت کنید) و خودمان (به self-signed دقت کنید) از طریق این فایل قصد تهیه گواهینامه یا certificate رو داریم.یعنی به جای این که فایل hostcsr.pem را به بعضی از شرکت های CA که در بالا ذکر شد ارائه دهیم خودمان این کار را انجام می دهیم.طبیعتا گواهینامه ای که ما تولید می کنیم امنیت تضمین شده و بالایی همانند گواهینامه های شرکت های CA تجاری نمی دهد و از لحاظ امنیت در سطح پایین تری قرار دارد اما حداقل اجازه فراهم کردن یک کانکشن https را برای شما فراهم می کند!
نکته:پس راه اندازی این گونه گواهینامه ها سیستم های کلاینت با پیامی روبرو می شوند که بیان می کنند شناسه گواهینامه سایت موردنظر تایید نمی شود و امن نیست که برای این موارد کلاینت ها دارای گزینه اختیاری هستند که گواهینامه نشست مربوطه را قبول می کند و تمام زیر دامنه های //:https امن خواهند بود.
openssl req -x509 -days 365 -in hostcsr.pem -key hostkey.pem -out hostcert.pem
پس از اجرای دستور فوق بلافاصله فایل موردنظر ساخته می شود.
x509-
:باعث تولید یک گواهینامه
days 365-
:تاریخ اعتبار برای گواهینامه ای که قرار است ایجاد شود 365 روز یا یک سال خواهد بود.
in hostcsr.pem-
:باعث خواندن CSR از درون فایل hostcsr.pem می شود
key hostkey.pem-
:باعث خواندن private key از فایل hostkey.pem می شود
out hostcert.pem-
:نوشتن گواهینامه در درون فایل hostcert.pem
بنابراین فایل hostcert.pem حاوی گواهینامه ای است که ما خودمان به کمک دنیای گنو/لینوکس و دستور قدرتمند openssl تولید کردیم اگر چه به اندازه گواهینامه های شرکت های CA تجاری دارای امنیت تضمین شده نیست (سطح امنیتی کمتر) ولی برای راه اندازی سرویس های https محلی کاملا کارا می باشد و در سرویس های امن https از آن ها استفاده نمی شود اگر چه با مطالعه در این زمینه می توان تا حدودی در افزایش امنیت آن کوشش کرد.
اما در بعضی موارد می توان از این گواهینامه ها استفاده کرد:
- فرم های دارای یوزرنیم و پسورد
- در جاهای محدود که بین ما و مشتریان مشخصی رابطه برقرار می شود.
نکته:تفاوت بین Self Signed SSL و Certificate Authority در این است که امنیت گواهینامه هایی Self Signed بسیار کمتر از گواهینامه های شرکت های CA می باشد و در واقع وقتی از گواهینامه های Self Signed استفاده می کنیم شما جمله "trust me - I am who I say I am" را برای کلاینت ها پیاده سازی می کنید لذا براحتی سرور در معرض حمله قرار میگیرد اما وقتی از گواهینامه های صادر شده از شرکت های CA استفاده می کنیم مثلا Verisign شما به کلاینت ها جمله "Trust me - Verisign agrees I am who I say I am" را بیان می کنید.
مثال:نمایش محتویات یک Certificate Signing Request یا CSR
اگر قصد دارید محتویات فایل hostcsr.pem را مطالعه کنید آن را در یک ویرایشگر متن باز کنید چیزی شبیه متن رمزنگاری شده ی زیر می بینید.
-----BEGIN CERTIFICATE REQUEST----- MIIB+jCCAWMCAQAwgYoxCzAJBgNVBAYTAmlyMQ0wCwYDVQQIDARRdW9tMQ0wCwYD VQQHDARRdW9tMQ4wDAYDVQQKDAVpcmFuaTEPMA0GA1UECwwGdGVzdGVyMRQwEgYD VQQDDAt3d3cuMzBsaS5pcjEmMCQGCSqGSIb3DQEJARYXeW91cmVtYWlsQG1haWxz ZXJ2ZXIuaXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALPvM2MJ/dAj3bwW u7yHSQ77b/eIIowxC1W6H8njPt64RX0/27LOTi2ZRYFMfrsXX6w0M9zU/JDvcpDK OMHfK9lhI0TpnUthSwKa6cNeph9M2QO/2BzxL4+VDGHd7L4j527MXdjpqp0k9qE8 vFkS9k5yauWM6pG6SX/aCTBGtwOfAgMBAAGgLzATBgkqhkiG9w0BCQIxBgwEd2Vi MTAYBgkqhkiG9w0BCQcxCwwJcGFzc3dvcmRzMA0GCSqGSIb3DQEBBQUAA4GBACu0 DURxlEOsuxu1kaqr6bnaqv+PLw6KWmwQR6n/qE+xSKcQv43tIT6qa4gBBgoEer7a bEsbVgQv1dzjHJoa5u8mHr40Ha85z6OMlotB+JP1EhMLbMuNEDfcKuYWPEUZ1vnT s4A8Wf3qo2wA+VW7OOK4YbeoRoGJYgOVmSmx5kpg -----END CERTIFICATE REQUEST-----
لذا برای دیدن محتویات فایل hostcsr.pem را از طریق خط فرمان از دستور openssl استفاده می کنیم.
dotnet@dotnet-V:~$ openssl req -text -noout -in hostcsr.pem Certificate Request: Data: Version: 0 (0x0) Subject: C=ir, ST=Quom, L=Quom, O=irani, OU=tester, CN=www.30li.ir/emailAddress=youremail@mailserver.ir Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:b3:ef:33:63:09:fd:d0:23:dd:bc:16:bb:bc:87: 49:0e:fb:6f:f7:88:22:8c:31:0b:55:ba:1f:c9:e3: 3e:de:b8:45:7d:3f:db:b2:ce:4e:2d:99:45:81:4c: 7e:bb:17:5f:ac:34:33:dc:d4:fc:90:ef:72:90:ca: 38:c1:df:2b:d9:61:23:44:e9:9d:4b:61:4b:02:9a: e9:c3:5e:a6:1f:4c:d9:03:bf:d8:1c:f1:2f:8f:95: 0c:61:dd:ec:be:23:e7:6e:cc:5d:d8:e9:aa:9d:24: f6:a1:3c:bc:59:12:f6:4e:72:6a:e5:8c:ea:91:ba: 49:7f:da:09:30:46:b7:03:9f Exponent: 65537 (0x10001) Attributes: unstructuredName :unable to print attribute challengePassword :unable to print attribute Signature Algorithm: sha1WithRSAEncryption 2b:b4:0d:44:71:94:43:ac:bb:1b:b5:91:aa:ab:e9:b9:da:aa: ff:8f:2f:0e:8a:5a:6c:10:47:a9:ff:a8:4f:b1:48:a7:10:bf: 8d:ed:21:3e:aa:6b:88:01:06:0a:04:7a:be:da:6c:4b:1b:56: 04:2f:d5:dc:e3:1c:9a:1a:e6:ef:26:1e:be:34:1d:af:39:cf: a3:8c:96:8b:41:f8:93:f5:12:13:0b:6c:cb:8d:10:37:dc:2a: e6:16:3c:45:19:d6:f9:d3:b3:80:3c:59:fd:ea:a3:6c:00:f9: 55:bb:38:e2:b8:61:b7:a8:46:81:89:62:03:95:99:29:b1:e6: 4a:60
text-
:نمایش محتویات فایل CSR بصورت متن
noout-
:عدم نمایش نسخه PEM-encoded فایل CSR
in hostcsr.pem-
:خواندن CSR از فایل مقصد (در اینجا hostcsr.pem )
مثال:نمایش محتویات یک گواهینامه-Certificate
همانند مثال قبل اگر بخواهیم به کمک ویرایشگر متن اقدام به باز کردن فایل حاوی گواهینامه کنیم چیزی چز اطلاعات رمز نگاری شده بدست نمی آوریم.
-----BEGIN CERTIFICATE----- MIIC5DCCAk2gAwIBAgIJAPe4xnSnGf5PMA0GCSqGSIb3DQEBBQUAMIGKMQswCQYD VQQGEwJpcjENMAsGA1UECAwEUXVvbTENMAsGA1UEBwwEUXVvbTEOMAwGA1UECgwF aXJhbmkxDzANBgNVBAsMBnRlc3RlcjEUMBIGA1UEAwwLd3d3LjMwbGkuaXIxJjAk BgkqhkiG9w0BCQEWF3lvdXJlbWFpbEBtYWlsc2VydmVyLmlyMB4XDTEzMDcxODIx MzExMVoXDTE0MDcxODIxMzExMVowgYoxCzAJBgNVBAYTAmlyMQ0wCwYDVQQIDARR dW9tMQ0wCwYDVQQHDARRdW9tMQ4wDAYDVQQKDAVpcmFuaTEPMA0GA1UECwwGdGVz dGVyMRQwEgYDVQQDDAt3d3cuMzBsaS5pcjEmMCQGCSqGSIb3DQEJARYXeW91cmVt YWlsQG1haWxzZXJ2ZXIuaXIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALPv M2MJ/dAj3bwWu7yHSQ77b/eIIowxC1W6H8njPt64RX0/27LOTi2ZRYFMfrsXX6w0 M9zU/JDvcpDKOMHfK9lhI0TpnUthSwKa6cNeph9M2QO/2BzxL4+VDGHd7L4j527M Xdjpqp0k9qE8vFkS9k5yauWM6pG6SX/aCTBGtwOfAgMBAAGjUDBOMB0GA1UdDgQW BBS3vHI2je0+aaPGIQP9fymcko+ZQTAfBgNVHSMEGDAWgBS3vHI2je0+aaPGIQP9 fymcko+ZQTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBADBGrKfEWNwd MAB1XNdnLL8sLmxZ7Vqz2PyFiCw3PHmeiJhv2VmSMFjApTEArQUa48vWBsoStz40 sl4qv7iierEm2qbeM69e9P+6HUaLXht0am4aMkoV8Amo61o5UnThm/ObpVSsebsl /okoqVtN+NdrDWodHuqEX8Hk8g6+f/Qb -----END CERTIFICATE-----
لذا برای دیدن محتویات گواهینامه باید از دستور زیر استفاده کنیم
dotnet@dotnet-V:~$ openssl x509 -text -noout -in hostcert.pem Certificate: Data: Version: 3 (0x2) Serial Number: f7:b8:c6:74:a7:19:fe:4f Signature Algorithm: sha1WithRSAEncryption Issuer: C=ir, ST=Quom, L=Quom, O=irani, OU=tester, CN=www.30li.ir/emailAddress=youremail@mailserver.ir Validity Not Before: Jul 18 21:31:11 2013 GMT Not After : Jul 18 21:31:11 2014 GMT Subject: C=ir, ST=Quom, L=Quom, O=irani, OU=tester, CN=www.30li.ir/emailAddress=youremail@mailserver.ir Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:b3:ef:33:63:09:fd:d0:23:dd:bc:16:bb:bc:87: 49:0e:fb:6f:f7:88:22:8c:31:0b:55:ba:1f:c9:e3: 3e:de:b8:45:7d:3f:db:b2:ce:4e:2d:99:45:81:4c: 7e:bb:17:5f:ac:34:33:dc:d4:fc:90:ef:72:90:ca: 38:c1:df:2b:d9:61:23:44:e9:9d:4b:61:4b:02:9a: e9:c3:5e:a6:1f:4c:d9:03:bf:d8:1c:f1:2f:8f:95: 0c:61:dd:ec:be:23:e7:6e:cc:5d:d8:e9:aa:9d:24: f6:a1:3c:bc:59:12:f6:4e:72:6a:e5:8c:ea:91:ba: 49:7f:da:09:30:46:b7:03:9f Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: B7:BC:72:36:8D:ED:3E:69:A3:C6:21:03:FD:7F:29:9C:92:8F:99:41 X509v3 Authority Key Identifier: keyid:B7:BC:72:36:8D:ED:3E:69:A3:C6:21:03:FD:7F:29:9C:92:8F:99:41 X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption 30:46:ac:a7:c4:58:dc:1d:30:00:75:5c:d7:67:2c:bf:2c:2e: 6c:59:ed:5a:b3:d8:fc:85:88:2c:37:3c:79:9e:88:98:6f:d9: 59:92:30:58:c0:a5:31:00:ad:05:1a:e3:cb:d6:06:ca:12:b7: 3e:34:b2:5e:2a:bf:b8:a2:7a:b1:26:da:a6:de:33:af:5e:f4: ff:ba:1d:46:8b:5e:1b:74:6a:6e:1a:32:4a:15:f0:09:a8:eb: 5a:39:52:74:e1:9b:f3:9b:a5:54:ac:79:bb:25:fe:89:28:a9: 5b:4d:f8:d7:6b:0d:6a:1d:1e:ea:84:5f:c1:e4:f2:0e:be:7f: f4:1b
مثال:مشاهده امضاء کننده یک گواهینامه
dotnet@dotnet-V:~$ openssl x509 -in hostcert.pem -noout -issuer -issuer_hash issuer= /C=ir/ST=Quom/L=Quom/O=irani/OU=tester/CN=www.30li.ir/emailAddress=youremail@mailserver.ir 7eae493e
دقت کنید در اینجا گواهینامه در یک فایل با پسوند hostcert.pem قرار دارد.
in cert.pem-
:خواندن گواهینامه از فایل موردنظر
issuer-
:نمایش صادر کننده Distinguished Name-DN
issuer_hash-
:نام صادر کننده گواهینامه را به صورت رمز شده به بیرون میدهد
مثال:نمایش محتویات رمزنگاری شده ی یک گواهینامه!
dotnet@dotnet-V:~$ openssl x509 -noout -hash -in hostcert.pem 7eae493e
مثال:پیاده سازی تابع md5sum
به کمک دستور زیر می توانیم تابع md5sum را پیاده سازی کنیم.
dotnet@dotnet-V:~$ openssl dgst -md5 /home/dotnet/Desktop/test.php MD5(/home/akbar/Desktop/test.php)= d41d8cd98f00b204e9800998ecf8427e
که معادل است با:
dotnet@dotnet-V:~$ md5sum /home/dotnet/Desktop/test.php d41d8cd98f00b204e9800998ecf8427e /home/akbar/Desktop/test.php
مثال:پیاده سازی تابع sha1sum
dotnet@dotnet-V:~$ openssl dgst -sha1 /home/dotnet/Desktop/test.php SHA1(/home/akbar/Desktop/test.php)= da39a3ee5e6b4b0d3255bfef95601890afd80709 dotnet@dotnet-V:~$ sha1sum /home/dotnet/Desktop/test.php da39a3ee5e6b4b0d3255bfef95601890afd80709 /home/akbar/Desktop/test.php
خروجی هر 2 دستور یکسان هستند.
مثال:رمزنگاری فایل
$ openssl enc -base64 -in file.txt -out file.txt.enc
این دستور فایل file.txt را رمز می کند و به فایلی به file.txt.enc تغییر میدهد . پارامتر out-
را برای تولید خروجی استفاده می کنیم.
مثال:رمزنگاری پیام ها
dotnet@dotnet-V:~$ echo "Polymath." | openssl enc -base64 UG9seW1hdGguCg==
رشته (در اینجا کلمه .Polymath ) را از طریق پایپ لاین به دستور openssl می فرستد و به کمک پارامتر enc
الگوریتم رمزنگاری base64-
را فراخوانی میکند و رشته [کلمه] دریافتی را رمزنگاری میکند.
$ echo "Welcome to LinuxCareer.com" | openssl enc -base64 V2VsY29tZSB0byBMaW51eENhcmVlci5jb20K
در 2 مثال بالایی اگر چه عمل رمزنگاری انجام می شد ولی فاقد پسورد است در مثال پایینی با مثال بهتری آشنا می شویم.
dotnet@dotnet-V:~$ echo "iran-bsd.ir" | openssl enc -aes-256-cbc -a enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password: U2FsdGVkX19z3HlC+5ge2OYIDvcORt9j8j3ocrVKBNo=
در اینجا رشته iran-bsd.ir را به کمک دستور فوق رمزنگاری کرده ایم و کلمه pass هم به عنوان پسورد انتخاب شده بود
مثال:شکستن(باز گشایی) جملات رمز شده
2 راه برای این کار داریم:یکی استفاده از وب گاههای تحت وب هست و دیگری هم به کمک دستور موجود
dotnet@dotnet-V:~$ echo "UG9seW1hdGguCg==" | openssl enc -base64 -d Polymath.
خروجی در زیر آن نوشته شده است.
dotnet@dotnet-V:~$ echo "V2VsY29tZSB0byBMaW51eENhcmVlci5jb20K" | openssl enc -base64 -d Welcome to LinuxCareer.com
نکته:برای رمزگشایی از پارامتر d-
استفاده می شود.
dotnet@dotnet-V:~$ echo "U2FsdGVkX181xscMhkpIA6J0qd76N/nSjjTc9NrDUC0CBSLpZQxQ2Db7ipd7kexj" | openssl enc -aes-256-cbc -d -a enter aes-256-cbc decryption password: LinuxCareer.com
علاوه بر رمزنگاری بروی رشته موردنظر پسورد نیز قرار می دهد و برای رمزگشایی اگر کسی به نوع cipher (در اینجا aes-256-cbc- ) دسترسی داشته باشد باید حتما پسورد را نیز بداند!
در این مثال کلمه pass به عنوان رمز عبور مثال فوق انتخاب شده است.
مثال:تشخیص اعداد اول
dotnet@dotnet-V:~$ openssl prime 119054759245460753 1A6F7AC39A53511 is not prime dotnet@dotnet-V:~$ openssl prime 5 5 is prime dotnet@dotnet-V:~$ openssl prime 6 6 is not prime
تشخیص اول بودن به کمک پارامتر prime
صورت می گیرد
مثال:تولید اعداد تصادفی
چاپ 128 بایت کارکتر تصادفی بر پایه الگوریتم base64
dotnet@dotnet-V:~$ openssl rand -base64 128 0Uqo1kaMJdeB+ZL48hfxwq/DIq+Dy69jWB0MrZWKlXrI6wKOPI/uB19VyzxzmU5C 7Yc27VYFp38TAbqsPSF8rldN8J0E8O1Ad8TZz53+MyOfqAHi9MX/8wA38OIzLzcY YuCBzPoL+i9JG6x9k19IneFBCm/BE/pHJHcGRWvh2i8=
مثال:رمزنگاری فایل ها
dotnet@dotnet-V:~$ openssl enc -aes-256-cbc -salt -in /home/test.php -out file.enc enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password:
فایل test.php را به کمک الگوریتم AES بطول 256-bit و با مد CBC رمزنگاری میکند و در ادامه نیز با یک پسورد باید از آن محافظت کنید و خروجی فایل file.enc خواهد بود.
در مقصد برای رمزگشایی فایل file.enc به 2 پارامتر پسورد و نوع cipher (در اینجا -aes-256-cbc ) نیاز داریم که به کمک این دو فایل رو باز کنیم.یعنی دستوری مانند زیر:
$ openssl enc -d -aes-256-cbc -in file.enc
که طبیعتاً از شما پسورد را نیز میخواهد.
مثال:رمزنگاری پوشه ها
dotnet@dotnet-V:~$ tar cz /home/akbari/Desktop/TXT/ | openssl enc -aes-256-cbc -out etc.tar.gz.dat tar: Removing leading `/' from member names enter aes-256-cbc encryption password: Verifying - enter aes-256-cbc encryption password:
در این نوع مثال ها ابتدا باید کل پوشه مورد نظر با دستور tar فشرده سازی کنیم سپس به کمک پایپ لاین آن را به دستور موردنظر بفرستیم تا عملیات رمز نگاری طبق cipher تعیین شده صورت بگیرد با پارامتر out-
خروجی در فایلی با پسوند dat ذخیره می شود.
نکته:در ادامه برای پیدا کردن لیست cipher ها خواهیم داشت:
dotnet@dotnet-V:~$ openssl list-cipher-commands aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc aes-256-ecb base64 bf bf-cbc bf-cfb bf-ecb bf-ofb camellia-128-cbc camellia-128-ecb camellia-192-cbc camellia-192-ecb camellia-256-cbc camellia-256-ecb cast cast-cbc cast5-cbc cast5-cfb cast5-ecb cast5-ofb des des-cbc des-cfb des-ecb des-ede des-ede-cbc des-ede-cfb des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-ofb des-ofb des3 desx rc2 rc2-40-cbc rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb rc4 rc4-40 seed seed-cbc seed-cfb seed-ecb seed-ofb zlib
در اینجا با بخش اندکی از دستور قدرتمند openssl آشنا شدیم که بصورت جسته گریخته صرفا جهت ایجاد انگیزه و آشنایی با دنیای قدرتمند خط فرمان گنو/لینوکس و ایجاد انگیزه برای کاربران بیان شده و برای بیان تمام توابع و پارامترهای آن شاید نیازمند به بیان چندین صفحه باشیم.در صورت هر گونه اشتباه لطفا جهت مکاتبه به آدرس http://30li.ir/contact با مدیریت سایت تماس بگیرید.
--------------------
منابع :
- برای آشنایی با مفاهیم SSL و CSR و ... به ادرس های زیر بروید:
http://http://www.sslshopper.com/why-ssl-the-purpose-of-using-ssl-certificates.html
http://www.sslshopper.com/ssl-details.html
- رمزنگاری کلید عمومی-Public key cryptographic
http://en.wikipedia.org/wiki/Cryptography#Public-key_cryptography
- اطلاعات بیشتر در موردciphers
http://www.openssl.org/docs/apps/ciphers.html
- لیست بعضی از شرکت های Certification Authority
- Self-signed certificate
http://en.wikipedia.org/wiki/Self-signed_certificate
- استاندارد X.509
http://en.wikipedia.org/wiki/X.509
- آشنایی با public-key infrastructure-PKI
http://en.wikipedia.org/wiki/Public-key_infrastructure
- Difference between Self Signed SSL & Certificate Authority
- کتاب "امنیت داده ها"-احسان ملکیان و علی ذاکر الحسینی (نشر نص)
نکته:اگر حوصله قبول دردسر کار با openssl در خط فرمان ندارید می توانید از ابزارهای SSL Certificate یا SSL Certificate Tools در ادرس زیر استفاده کنید: