نکاتی جهت برنامه نویسی با gnutls

نکاتی جهت برنامه نویسی با gnutls



کتابخانه gnutls یکی از پروژه های GNU میباشد که به منظور پیاده سازی اتصال TLS و SSL توسعه یافته است. چنانچه بخواهید اتصالی امن از نوع TLS را پیاده سازی کنید این کتابخانه میتواند یکی از انتخابهای شما باشد.

 

آگاهی به نکاتی که در ادامه می آید میتواند برنامه نویسی با این کتابخانه را راحتتر کند.

این کتابخانه با تابع زیر آماده سازی میشود:

()gnutls_global_init

چنانچه در محیط چند نخی برنامه نویسی میکنید و از کتابخانه pthread استفاده میشود لازم است قبل از فراخوانی این تابع، تابع زیر فراخوانی شود:

gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread)

این تابع تنظیمات چند نخی را در کتابخانه gnuCrypt که gnutls از آن استفاده میکند انجام میدهد. بدون انجام این کار در حین اجرای برنامه با مشکلات متعددی مواجه میشوید.

یکی دیگر از نکات در برنامه نویسی چند نخی آگاهی از نحوه دسترسی به gnutls_session_t میباشد. دسترسی به این ساختار از چند نخ در صورتی امن است که صرفا یک نخ اجازه write داشته باشد. فعالیتهای همزمان read تضمین شده است.

در ادامه به هنگام ایجاد session نیاز هست اولویتهای تنظیمات را برای session تنظیم کنید.

gnutls اصطلاحی به نام cipher suite دارد که از طریق اجرای دستوری gnutls-cli --list قابل مشاهده است. یک suite مجموعه ای از تنظمیات است که از جمله آنها الگوریتم تبادل کلید، الگوریتم hash و ... میباشد.

لازم است الگوریتمهای مختلف برای session مورد نظر اولویت دهی شوند. برای این منظور میتوان به شیوه زیر عمل کرد:

; int protocol[] = {GNUTLS_TLS1_2, 0}
; int mac[] = {GNUTLS_MAC_SHA512, GNUTLS_MAC_SHA256, GNUTLS_MAC_SHA1, 0}
; int cipher[] = {GNUTLS_CIPHER_AES_128_CBC, GNUTLS_CIPHER_AES_256_CBC, 0}
; int kx[] = {GNUTLS_KX_DHE_RSA, 0}

; gnutls_init(&session, GNUTLS_SERVER)

; gnutls_set_default_priority(session)
; gnutls_cipher_set_priority(session, cipher)
; gnutls_protocol_set_priority(session, protocol)
; gnutls_mac_set_priority(session, mac)
; gnutls_kx_set_priority(session, kx)

هر چند توضیحات بسیار کوتاه است اما این نکات کلیدی میزان زیادی از زمان شما را ذخیره میکند.