OpenSSL تقديم


تقديم openSSL
بروتوكول SSL


البروتوكول  (SSL ( Secure Socket Layer تم تطويره من قبل شركة Netscape Communications Corporation
بهدف السماح Client/Server بالإتصال فيما بينهم بشكل آمن. (TLS (Transport Layer Security هو تطوير لSSL
من قبل IETF.

النسخة الثالثة من SSL أصبحت تستعمل من قبل المتصفحات ك NetScape و IE منذ النسخة 4.

SSL هو بروتوكول يتواجد بين TCP/IP و التطبيقات التي تستعمل TCP. يمر استعمال SSL بمرحلتين:
  1. مرحلة المصافحة (handshake) بين الخادم و العميل, و فيها يتم تحديد نظام التشفير و المفتاح التي سيستخدمانها.
  2. مرحلة الإتصال وفيها يتم تبادل المعلومات بشكل مشفر و موقع و مضغوط.


OpenSSL

openSSL هو برنامج مفتوح المصدر يحتوي على أدوات التشفير و يستعمل بروتوكولات SSL و TLS و يوفر:
  1. مكتبة البرمجة بلغة C تسمح بتوفير تطبيقات Client/Server و تستعمل فيها TLS/SSL.
  2. كتابة الأوامر (OpenSSL) و تسمح ب:
  • كتابة مفاتيح DSA  (التوقيع) , RSA 
  • عمل رخصات X509 
  • حساب البصمات (MD5,SH1...)
  • تشفير و فك التشفير (DES, IDEA, RC2,RC4 ...)
  • اجراء اختبارات الخادم/العميل  SSL/TLS
  • التوقيع و تشفير الرسائل (S/MIME)
للتعرف على كافة الوضائف لOpenSSL نستعمل: man openssl

الصيغة العامة لOpenSSl هي:
openssl <command> <option> 

استعمال RSA على OpenSSL
توليد زوج من المفاتيح

لعمل زوج من مفاتيح RSA نستعمل الأمر genrsa على openssl
$openssl genrsa -out  <file> <size> 

حيث file اسم الملف الذي سنستعمله كمفتاح و size هي حجم الملف بالبت bits
مثال المفتاح اسمه key.pem و الحجم الذي اخترناه 1024
$openssl genrsa -out key.pem 1024
و سنتحصل على ملف بصيغة  (PEM(Privacy Enhanced Mail مثال

-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQC8/7ifuXzjhuV14xSg1+qsfpqGwMPKv23raKFO3HffN2ggiWQK
LjyjQG5MJZlWS5atjMq6qGekjnz8kQDJhWOjqfRaSKKceM1aM8dOqb/Vikc9FTtO
VaS4aLTr3P06MY/J+ZrmbD5N6qLMjl+Y+Ju4c9WOQ6vYI9WsKhPfOAPoOwIDAQAB
AoGBAJU7xmg4amiuB1lCaPNoCiESBqoIY5Ef/oc3IsfGRdC3Sz0Fvzxarf6pzW3K
8ny1StDWru0cNFo3OHGlfV2iOb2RjQhCQ6qBuxGIemkFFgonBEo0YLpURyzrWqaH
MND4RA7EdB0fraiHLtVjUHkxwj9JpamzAA9NeSzO4jjuOBPhAkEA54yd0W4qNlBg
l4jiBgf9n0+hk2fUcr9gK6MatJwsQinnhv6V0h63l6U+GYyrMehsLzKKvOE7Ywls
ImISzOEAJQJBAND021GlsL50GAHbRy7VeFr55ZdDEXV/zjQMXa84HKHm/NKl9rSL
8kabL71HdYMgXYYhivQm89Va/a4PCpxTKN8CQQCq1wMyHJgkjtVVuPcbABZOztAm
FDuZlj38tFDl5Tx6bLSY04nzCBrpVlAlRbaiEhyQDjhy97N7dN5F2BqK84/JAkEA
gvF+YurvGFqOFNPCBtJVSsWhH6oyzawanzlEmCIUp0ymEKdaM4gjeiWTxAx80oA8
u2pXtmqWkJQltqbMYmwmhwJALeXAMUIEuRyELVnL8iicvHBmXRx6SwQAJYcHRUZB
kN9kr/pvixgTFXPaRZcqp/XFQUfuyQ+HcBDoMLzB8l6tGQ==
-----END RSA PRIVATE KEY-----


مشاهدة مفتاح RSA

و يكون ذلك عبر الأمر التالي
$openssl rsa -in <file> -text -noout
text تسمح بفك المفتاح و noout تقوم بحذف المخرج الذي من المفترض أن يخرج عبر rsa
مع التذكير بأن الصيغة التي تخرج بها النتيجة هي Hexadecimal 

تشفير ملف RSA

لا يجب أن نترك أبدا المفتاح من غير تشفير و خصوصا private key   لذلك نجد ثلاثة خيارات ممكنة للقيام بتشفير المفتاح
des, -des3, -idea- يمكن استعمالها علر rsa

$openssl rsa -in key.pem -des3 -out key.pem

ثم نقوم بادخال كلمة المرور

عمل مفتاح عام/معلن Public Key 

المفتاح الخاص Private Key لا يمكن استعماله حتى و ان كان مشفرا لأسباب أمنية, لهذا السبب يقع تبادل مفتاح عام public key
بين الطرفين اللذَان يرغبان في تبادل الملفات بينهما

$openssl rsa -in key.pem -pubout -out Pubkey.pem

تشفير/ فك تشفير الملفات باستعمال RSA

openssl rsautl -encrypt -in MyFav.txt -inkey key.pem -out Crypt.txt

MyFav.txt هو الملف الذي أردت تشفيره, Crype.txt هو الملف بعد التشفير, inkey يحتي Private Key المفتاح السري الذي قمنا
بصنعه في البداية.

طبعا لفك التشفير سنقوم بتغيير encryptt ب decrypt, لو أردنا تطبيقه عمليا 



ستقوم الفتاة َAlice بتوليد مفتاحين الأخضر معلن و الأحمر سري لا يمكن تبادله, ثم ستقوم Alice بارسال مفتاحها المعلن 
إلى Bob ليستعمله في تشفير رسالته

يستعمل Bob الملف المعلن في كتابة رسالة hello/مرحبا إلى Alice , و أخيرا عندما تصل الرسالة مشفرة إلى Alice 
ستقوم باستعمال مفتاحها الخاص لفك التشفير.

استعمال التواقيع Signature


الطريقة السابقة آمنة لكن لا يمكن أن نضمن أن الملفات التي سيقع تبادلها بين Bob  و َAlice ستصل كما هي من دون
أن يحاول أحد المخترقين التلاعب بالملفات, من أجل هذا وقع ابتكار ما يسمى Signature حتى نضمن أن الملفات
وصلت من دون تعديلات.

نستطيع أن نوقع الملفات صغيرة الحجم , لكن الملفات الكبيرة  تتطلب حساب البصمة imprint
الأمر dgst يسمح بذلك

$openssl dgst <hash> -out <imprint> <file_in>

يوجد أنواع عديدة من hash/hachage/البعثرة   مثل md5, sha1,ripemd160

مثال
$openssl dgst -md5 MyFav.txt
النتيجة
MD5(MyFav.txt)= 9499b36f3ab075b40359b657dba16f94
لتوقيع ملف نستعمل sign- من الأمر rsautl
$openssl rasautl -sign -in <imprint> -inkey <key> -out <sign>


$openssl rsautl -sign -in MyFav.txt -inkey key.pem -out signFile.txt
سينتج لدينا ملف signFile.txt مشفر, و للتثبت منه نكتب

$openssl rsautl -verify -in <sign> -pubin -inkey <key> -out <imprint>
مثال
openssl rsautl -verify -in signFile -pubin -inkey Pubkey.pem -out Verif.txt

 نستطيع عندها مقارنة الملفين Verif.txt و signFile.txt

استعمال الشهادة Certificate
سنقوم بعمل request/طلب  لنحصل على شهادة/Certificate

الشهادة يجب أن تحتوي على عدد من المعلومات التي تخص المالك

  • البلد
  • الولاية أو المقاطعة
  • المدينة / البلدة
  •  منظمة
  • وحدة
  •  اسم
  •  البريد الإلكتروني

كل تلك المعلومات ستطلب منك عند عمل request 



$openssl req -new -key key.pem -out req.pem



-----BEGIN CERTIFICATE REQUEST-----
MIIBnTCCAQYCAQAwXTELMAkGA1UEBhMCU0cxETAPBgNVBAoTCE0yQ3J5cHRvMRIw
EAYDVQQDEwlsb2NhbGhvc3QxJzAlBgkqhkiG9w0BCQEWGGFkbWluQHNlcnZlci5l
eGFtcGxlLmRvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAr1nYY1Qrll1r
uB/FqlCRrr5nvupdIN+3wF7q915tvEQoc74bnu6b8IbbGRMhzdzmvQ4SzFfVEAuM
MuTHeybPq5th7YDrTNizKKxOBnqE2KYuX9X22A1Kh49soJJFg6kPb9MUgiZBiMlv
tb7K3CHfgw5WagWnLl8Lb+ccvKZZl+8CAwEAAaAAMA0GCSqGSIb3DQEBBAUAA4GB
AHpoRp5YS55CZpy+wdigQEwjL/wSluvo+WjtpvP0YoBMJu4VMKeZi405R7o8oEwi
PdlrrliKNknFmHKIaCKTLRcU59ScA6ADEIWUzqmUzP5Cs6jrSRo3NKfg1bd09D1K
9rsQkRc9Urv9mRBIsredGnYECNeRaK5R1yzpOowninXC
-----END CERTIFICATE REQUEST-----

توقيع الشهادة

عند الإنتهاء من طلب الشهادة Certificate Request 

نقوم بعمل مفتاح جديد 
$openssl genrsa -aes256 -out CAkey.pem 1024

حيث 1024 هو الحجم, CAkey.pem هو الملف الذي يحتوي على المفتاح الذي سنستعمله لصنع Certificate

نقوم بتحضير الملف الذي سنستخرج منه Certificate

$openssl req -new -x509 -days 356 -key CAkey.pem -out CAcert.pem

أصبح لدينا ملف CAcert.pem الذي سنستعمله في الأمر التالي


$openssl x509 -days 356 -CAcreateserial -CAserial s.srl -CA CAcert.pem -CAkey CAkey.pem -in req.pem -req -out MyCertificate.pem

-----BEGIN CERTIFICATE-----
MIICMTCCAZoCCQCfZjhi/UhhzzANBgkqhkiG9w0BAQUFADBdMQswCQYDVQQGEwJU
TjELMAkGA1UECBMCVE4xEDAOBgNVBAcTB2JpemVydGUxDzANBgNVBAoTBmFjaHJh
ZjENMAsGA1UECxMEaW51eDEPMA0GA1UEAxMGYWNocmFmMB4XDTEwMTAyNzE3MDU1
NloXDTExMTAxODE3MDU1NlowXTELMAkGA1UEBhMCVE4xCzAJBgNVBAgTAlROMRAw
DgYDVQQHEwdiaXplcnRlMQ8wDQYDVQQKEwZhY2hyYWYxDTALBgNVBAsTBHVuaXgx
DzANBgNVBAMTBmFjaHJhZjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvP+4
n7l844bldeMUoNfqrH6ahsDDyr9t62ihTtx33zdoIIlkCi48o0BuTCWZVkuWrYzK
uqhnpI58/JEAyYVjo6n0WkiinHjNWjPHTqm/1YpHPRU7TlWkuGi069z9OjGPyfma
5mw+TeqizI5fmPibuHPVjkOr2CPVrCoT3zgD6DsCAwEAATANBgkqhkiG9w0BAQUF
AAOBgQBRFrtrPTFQxJX2fJAkvnmcxTGP5a9gbfA45VDQ20CiTYmoJ4O4cXzL1MmQ
f+WJ/vkUbjp59iWycc8Q0CRvjyeJjPquUgSvBuwUNJHtkho1e33253vIp9FQ/CIf
g4n9GpUmVz2NfLZzCkru4R7Whca3rdPkDiu1/V91R9Wn3KTeEA==
-----END CERTIFICATE-----

كل ما تبقى الآن هو أن نجعل certificate قابلة للإستعمال عبر متصفح الانترنات ...

$openssl pkcs12 -export -in MyCertificate.pem -inkey key.pem -certfile CAcert.pem -name "EW" -caname "Pere Ubu" -out End.p12



لتحميل الملف الأصلي بالفرنسية -اضغط على الصورة- متوافق مع المنهج التعليمي بالمعاهد التكنولوجية التونسية


ملاحظات هامة :
  •  يرجى مراسلتي على بريدي الإلكتروني إن لاحظت وجود أخطاء في التفسير حتى يقع تصحيحها,
  • جميع الأوامر في هذا المقال وقع تجربتها قبل كتابة أي منها .

0 comments: