ورود

View Full Version : کدام پروتکل: git:// یا ssh:// یا https://؟



Yousha
پنج شنبه 26 شهریور 1394, 18:30 عصر
همونطور که می دونید برنامه Git (http://git-scm.com/) برای کار با repository، پنج پروتکل در اختیار ما گذاشته که هرکدوم مزایا و معایب خودشونو دارن. این پروتکل ها:
1- File (یا همون Local protocol)
2- HTTP (یا همون Dumb protocol)
3- HTTPS (یا همون Smart protocol)
4- SSh
5- Git
هستند. اما از کدوم پروتکل باید استفاده کنیم؟ کدوم پروتکل امنیت بیشتری داره؟ و کدوم پرتکل سرعت بیشتری داره؟
پس وارد جزئیات میشیم!

//:File
این پروتکل برای کار با repository های داخل هارد(local) طراحی شده و ما در اینجا کاری بهش نداریم.

//:HTTP
این پروتکل بخاطر برخی کمبود ها و ضعفهای امنیتیش تقریباً منسوخ شده و هیچ سروری دیگه ازش استفاده نمی کنه و خود تیم Git هم ردش میکنه.

//:HTTPS


در حال حاضر، ساده ترین، محبوب ترین و سازگارترین(compatible) پروتکل استفاده از Git هستش.
هم قابلیت Read-only داره و هم Writable هه.
سرعتش برای انتقال اطلاعات نرماله.
سرور بصورت خودکار توسط certificate تایید می شه.
hand-shake بین کلاینت و سرور در 2-3 پروسه انجام میشه.
توسط X.509 certificate اطلاعات رو رمزنگاری می کنه.
نیاز به SSh Keys و آپلود Public Key در سرور نداره، پس از هر مکانی و سیستمی قابل استفادست. (web-based)
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 443 تنظیم میشه و توسط Firewall مسدود نشده.
گزینه مناسب برای repository های عمومی و خصوصی با ترافیک متوسط.
احراز هویت(authentication) توسط username و password حساب کاربر در سرور انجام میشه.
در صورت دزدیده شدن username و password، کل حساب کاربری در سرور از دست خواهد رفت.
اکثر سرورهای HTTPS اجازه pull و clone کردن بصورت anonymous رو میدن.
بیشتر فرایند های امنیتی در مرورگر/وب انجام میشه و نه در Git.
دستورات و عملیات بصورت POST/GET ارسال و دریافت میشن.
بدون تنظیم credential-caching در کلاینت، کاربر برای push کردن باید هربار احراز هویت کند. (clone و pull رو هم شامل میشه اگر دسترسیش محدود شده باشه)
برای راه اندازی سرور Git، به برنامه Git، یک TLS certificate معتبر و Web server نیاز داره. بنابراین راه اندازی سرور HTTPS کمی زمانبر هستش.
این پروتکل تقریباً در سال 1995 رونمایی شد.
نمونه URL:
کد:

git clone https://domain/project.git


//:SSh

نسبت به HTTPS از سادگی، محبوبیت و سازگاری(compability) کمتری برخورداره. (چون حرفه ای تر و قدرتمند تره)
هم قابلیت Read-only داره و هم Writable هه.
سرعتش برای انتقال اطلاعات سریعتر از HTTPS هه.
سرور با اجازه کاربر توسط Fingerprint کلید تایید می شه.
hand-shake بین کلاینت و سرور در 5-6 پروسه انجام میشه.
توسط AES, Blowfish, RC4, 3DES, CAST128 یا Arcfour اطلاعات رو رمزنگاری می کنه.
نیاز به SSh Keys و آپلود Public Key در سرور داره، پس کاربر باید به SSh مجهز باشه.
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 9418 تنظیم میشه و گاهاً توسط Firewall مسدود شده. (در سرورهای درجه 2-3 یا دولتی)
بهترین گزینه برای repository های خصوصی و حساس.
احراز هویت(authentication) توسط Key ها انجام میشه. (حداکثر امنیت)
در صورت دزدیده شدن Private Key، کافیست Public key از حساب کاربری در سرور حذف بشه.
اکثر سرورهای SSh اجازه pull و clone کردن بصورت anonymous رو نمیدن.
بیشتر فرایند های امنیتی در خود SSh و Git انجام میشه.
دستورات و عملیات بصورت پارامتری ارسال و دریافت میشن.
کد:

ssh -x git@domain "git-receive-pack 'project.git'"
کاربر برای push کردن کافیست فقط یکبار در کلاینتش احراز هویت کند. (clone و pull رو هم شامل میشه)
برای راه اندازی سرور Git، به برنامه Git، و SSh نیاز داره.
این پروتکل تقریباً در سال 1995 رونمایی شد.
نمونه URL:
کد:

git clone ssh://username@domain/project.git
یا
git clone username@domain:project.git


//:Git

نسبت به SSh از سادگی، محبوبیت و سازگاری(compability) بیشتری برخورداره.
در حالت معمول فقط قابلیت Read-only داره.
سرعتش برای انتقال اطلاعات بسیار سریعتر از HTTPS و SSh هه.
هیچ مکانیزمی برای تایید سرور نداره.
تقریباً هیچ hand-shake ای بین کلاینت و سرور انجام نمیشه.
هیچ مکانیزم رمزنگاری درکار نیست.
نیاز به SSh Keys و آپلود Public Key در سرور نداره، فقط به برنامه Git نیاز داره.
از Pr@xi پشتیبانی می کنه.
معمولاً در پورت 9418 تنظیم میشه و گاهاً توسط Firewall مسدود شده. (در سرورهای درجه 2-3 و دولتی)
بهترین گزینه برای repository های عمومی Read-only با ترافیک بالا یا پروژه های سنگین.
هیچ احراز هویت(authentication) ای انجام نمیشه. (حداقل امنیت)
هیج گونه اطلاعات حساسی برای دزدیده شدن وجود نداره.
همه سرورهای Git اجازه pull و clone کردن بصورت anonymous رو میدن.
هیچ فرایند امنیتی انجام نمیشه.
دستورات و عملیات بصورت پارامتری ارسال و دریافت میشن.
git domain "git-receive-pack 'project.git'"
در حالت معمول امکان write/push کردن وجود نداره.
برای راه اندازی سرور Git فقط به Git نیاز داره.
این پروتکل تقریباً در سال 2005 رونمایی شد.
نمونه URL:
کد:

git clone git://domain/project.git


توجه: شما خودتون هم میتونید دسترسی Read-Only یا Writable به هر پروتوکلی که خواستید بدید.
این نکته رو هم در نظر داشته باشید که هرکدوم مزایا و معایب خودشونو دارن و باید درجای مناسبش پروتکل مناسب رو انتخاب کنید.

این مقاله جامع ترین و کامترین در نوع خودشه، حتی در بین مقالات خارجی.


منبع: انجمن IranPHP (http://forum.iranphp.org/showthread.php?tid=10087)

ابوالفضل عباسی
چهارشنبه 08 مهر 1394, 10:41 صبح
بنظر من از git و ssh:تشویق:(این بهتره) استفاده کنید بهتره
چون https برای سایت های بانکی که میخوان تراکنش بانکی انجام بدن استفاده میشه ولی من جایی خونده بودم این پروتکل خوبه اما حرفه ای ها راحت ه ک ش میکنن.:اشتباه:
شاید بخاطر همینه میگن سایت های بانکی ایرانی امنیت پایینی دارند.