PDA

View Full Version : پياده سازي ارتباطي امن بين سرور و كلاينت



mamaliy
چهارشنبه 05 آبان 1389, 14:57 عصر
با سلام خدمت دوستان.
برنامه اي كه قصد معرفي دارم راهكاري ساده براي برقراري ارتباطي امن بين سرور و كلاينت هست.

اول يه مختصر در مورد ssl (Secure socket Layer) بگم(براي خالي نبودن عريضه!):
ssl پروتكلي هست براي انتقال امن اطلاعات بين سرويس دهنده و سرويس گيرنده.
به اين صورت كه اطلاعات بين سرور و كلاينت به وسيله يك ذوج كليد(كليد عمومي و كليد خصوصي)
رمز نگاري شده و در طرف مقابل از حالت مرز خارج ميشه.كليد خصوصي فقط در اختيار رمزگشا اما كليد عمومي
ميتونه در دسترس هر كسي قرار بگيره .
توضيحات تكميلي در http://en.wikipedia.org/wiki/Secure_Sockets_Layer
دوم مختصري در مورد روز نگاري RSA:
رمز نگاري RSA روشي است كه در اون براي رمز نگاري و رمزگشايي از دو كليد(جفت كليد عمومي و خصوصي)
استفاده ميشه.به اين صورت كه اطلاعات توسط كليد عمومي كه مي تونه در اختيار هر كسي (حتي افراد بدخواه) باشه رمز شده و سپس
اطلاعات رمز شده اينبار توسط كليد خصوصي كه فقط بايد در اختيار افراد خيرخواه! باشه از حالت رمز خارج ميشه.
روش توليد كليد خصوصي و عمومي در سيستم RSA و همچنين توضيخات تكميلي رو ميتونيد در اينجا
http://en.wikipedia.org/wiki/RSA پيدا كنيد.

در اينجا بنده سعي كردم ارتباطي امن بين سرور و كلاينت برقرار كنم بدون حضور ssl .
صد در صد نواقص و كمبود هاي زيادي داره اما چون براي خودم مساله شده بود و از اين راه كار خوشم اومد خواستم تا اون رو
با دوستان به اشتراك بزارم.

توضيحات كلي درمورد برنامه:
در اين برنامه از جاوااسكريپت براي رمزنگاري سمت كلاينت استفاده كردم.
به اين صورت كه درسمت سرور براي رمزنگاري و همچنين توليد كليدهاي عمومي وخصوصي از كلاس RSACryptoServiceProvider واقع
در فضاي نام System.Security.Cryptography استفاده شده،
و در سمت كلاينت از كتابخانه هاي jsbn.js ، jsbn2.js ، prng4.js ، rng.js ، rsa.js ، rsa2.js واقع
در http://www-cs-students.stanford.edu/~tjw/jsbn (http://www-cs-students.stanford.edu/%7Etjw/jsbn) براي اين منظور استفاده كردم.

سرور كليد عموميش رو براي كلاينت ميفرسته(كليد خصوصي رو براي خودش و توي يه سشن به نام newPrivateKeys نگه ميداره) و كلاينت هم بعد از اينكه كليدهاشو توليد كرد كليد عموميش رو براي سرور ميفرسته و كليد خصوصيش رو براي خودش و در متغيير _d نگه داري ميكنه.

در صفحه ورود ابتدا كلمه عبور با استفاده از الگوريتم Sha256 هش ميشه(كتابخانه sha256 جاوااسكريپت) و سپس با استفاده از رمزنگاري RSA با طول كليد 1024 رمز نگاري ميشه.
در سمت سرور كلمه عبور رمز شده از حالت رمز خارج ميشه و سپس با كلمه عبور هش شده كاربر مقايسه ميشه. (در صفحه ورود فقط نياز به رمزنگاري سمت كلاينت و رمزگشايي سمت سرور داريم)
در صفحه مديريت (admin/manager.aspx) چون نياز به رمزنگاري و رمزگشايي در دو طرف هست(رمزنگاري سمت كلاينت-رمزگشايي سمت سرور ---و--- رمزنگاري سمت سرور-رمزگشايي سمت كلاينت) ابتدا توسط كتابخانه هاي RSA جاوااسكريپت سمت كلاينت اقدام به توليد كليدهاي عمومي و خصوصي سمت كلاينت ميشه بعد از توليد كليد ،كليد عمومي توسط Ajax به سمت سرور فرستاده ميشه و در سمت سرور درون سشني با نام client_rsa_nKey نگهداري ميشه.

در اين برنامه شما ابتدا به قسمت مديريت ورود ميكنيد و سپس در صفحه مديريت با استفاده از ajax اطلاعات كاربران رو مشاهده ميكنيد. در اين صفحه تمام ارتباط بين سرور و كلاينت رمزنگاري شده است.

"توجه: چون توليد كليد در سمت كلاينت توسط جاوااسكريپت انجام ميشه امكان داره اين كار چيزي حدود 50ثانيه تا 1 دقيفه طول بكشه و ممكنه مرور گرتون مثل مرورگر من (فايرفاكس) اخطار usresponsize script بده كه بايد ادامه فعاليت كد رو تاييد كنيد"
"توجه: چون در صفحه كلاينت كليد خصوصي درون متغير جاوااسكريپت نگه داري ميشه با Refresh كردن صفحه اين كليد از بين ميره و صفحه دوباره اقدام به توليد كليد ميكنه كه همونطور كه در بالا توضيح دادم طول كمي ميكشه."

"نكته : چون اين برنامه يك مثال از رمزنگاري هست لزومي در استفاده از ديتابيس نديدم . به زبانه ساده برنامه رو حاضري درست كردم .اطلاعات كاربر و كلمه عبور همه توي سورس كد برنامه وجود داره"

"توجه : در صفحه ورود نام كاربري رو mamaly و كلمه عبور رو m@m@ly وارد كنيد.در صفحه مديريت هم براي گرفتن اطلاعات كاربر نام كاربري رو دوباره mamaly وارد كنيد."

امكانات:
پياده سازي ajax ساده و معرفي شده در w3schools (بدون كامپوننت هاي ماكروسافتي و غيره)
استفاده از الگوريتم sha256 تحت جاوا اسكريپت در سمت كلاينت(Original code by Angel Marin, Paul Johnston)
استفاده از رمزنگاري rsa تحت جاوا اسكريپت در سمت كلاينت (http://www-cs-students.stanford.edu/~tjw/jsbn (http://www-cs-students.stanford.edu/%7Etjw/jsbn))

در آخر هم بايد بگم كه اين كار تقليدي ساده و در حد كاربري مثل من از ssl هست.

آدرس فايل برنامه:
http://barnamenevis.org/forum/downloads.php?do=file&id=234790&act=down[/URL]
آدرس سورس برنامه:
[URL]http://barnamenevis.org/forum/downloads.php?do=file&id=234805&act=down (http://barnamenevis.org/forum/downloads.php?do=file&id=234790)

majnun
چهارشنبه 05 آبان 1389, 20:14 عصر
لینک خرابه عزیز من دانلود نمیکنه

ممنون میشم درست کنی ...

raziee
چهارشنبه 05 آبان 1389, 21:08 عصر
لینک خرابه عزیز من دانلود نمیکنه

ممنون میشم درست کنی ...
لینک مشکلی نداره.

majnun
چهارشنبه 05 آبان 1389, 22:03 عصر
اما من نمیتونم دانلود کنم

میره درون idm میگه درحال دانلود صفحه سایت برای یافتن آدرس جدید ....

میشه همینجا ضمیمه کنید ؟

ممنون میشم

mamaliy
چهارشنبه 05 آبان 1389, 22:37 عصر
سلام دوست من.
لينك برنامه
http://www.box.net/shared/t09i40j7b7
لينك سورس
http://www.box.net/shared/tfqpb38tfq