s2n-tls adalah implementasi C99 dari protokol TLS/SSL yang dirancang sederhana, kecil, cepat, dan dengan keamanan sebagai prioritas. Ini dirilis dan dilisensikan di bawah Lisensi Apache 2.0.
s2n-tls adalah kependekan dari "signal to noise" dan mengacu pada tindakan enkripsi yang hampir ajaib — menyamarkan sinyal yang berarti, seperti data penting Anda, sebagai noise yang tampaknya acak.
-- pengumuman s2n-tls
# clone s2n-tls
git clone https://github.com/aws/s2n-tls.git
cd s2n-tls
# install build dependencies
sudo apt update
sudo apt install cmake
# install a libcrypto
sudo apt install libssl-dev
# build s2n-tls
cmake . -Bbuild
-DCMAKE_BUILD_TYPE=Release
-DCMAKE_INSTALL_PREFIX=./s2n-tls-install
cmake --build build -j $( nproc )
CTEST_PARALLEL_LEVEL= $( nproc ) ctest --test-dir build
cmake --install build
Lihat dokumentasi build s2n-tls untuk panduan lebih lanjut dalam membuat s2n-tls untuk platform Anda.
Jika Anda merasa menemukan masalah yang berdampak pada keamanan, ikuti Proses Pemberitahuan Keamanan kami.
Jika Anda memiliki pertanyaan tentang pengiriman PR, penggunaan API s2n-tls, atau hal serupa, silakan buka terbitan.
s2n-tls menggunakan Doxygen untuk mendokumentasikan API publiknya. Dokumentasi s2n-tls terbaru dapat ditemukan di halaman GitHub. Panduan Penggunaan menjelaskan bagaimana berbagai fitur TLS dapat dikonfigurasi dan digunakan.
Dokumentasi untuk versi lama atau cabang s2n-tls dapat dibuat secara lokal. Untuk menghasilkan dokumentasi, instal doxygen dan jalankan doxygen docs/doxygen/Doxyfile
. Dokumentasi doxygen sekarang dapat ditemukan di docs/doxygen/output/html/index.html
.
Petunjuk pemasangan Doxygen tersedia di halaman web Doxygen.
Kami telah mencantumkan distribusi dan platform dalam dua tingkatan: Platform Tingkat 1 dijamin dapat dibangun, dijalankan, dan lulus pengujian di CI. Platform Tingkat 2 dijamin dapat dibuat dan kami akan mengatasi masalah yang ada pada platform tersebut, namun platform tersebut saat ini tidak berjalan di CI kami dan tidak ditinjau secara aktif pada setiap komitmen. Jika Anda menggunakan platform yang tidak tercantum di bawah dan ingin meminta (atau membantu!) menambahkannya ke CI kami, silakan buka masalah untuk didiskusikan.
Distribusi di CI | Platform |
---|---|
Ubuntu18, Ubuntu24** | x86_64 |
Ubuntu22 | x86_64, i686 |
AL2, AL2023** | x86_64, aarch64 |
NixOS | x86_64, aarch64 |
OpenBSD 7.4 | x86_64 |
FreeBSD terbaru | x86_64 |
OSX terbaru | aarch64 |
**Pekerjaan Sedang Berlangsung
Distribusi tidak di CI | Platform |
---|---|
Fedora Inti 34-36 | x86_64, aarch64 |
Ubuntu14/16/20 | x86_64, aarch64 |
Ubuntu18/22/24 | aarch64 |
OS X 12-14 | x86_64 |
Daftar distribusi ini tidak lengkap dan peralatan yang hilang atau pustaka libcrypto yang didukung tidak ada dapat menghalangi keberhasilan pembangunan.
API I/O s2n-tls dirancang agar intuitif bagi pengembang yang akrab dengan API I/O POSIX yang banyak digunakan, dan s2n-tls mendukung I/O pemblokiran, non-pemblokiran, dan dupleks penuh. Selain itu tidak ada kunci atau mutex dalam s2n-tls.
/* Create a server mode connection handle */
struct s2n_connection * conn = s2n_connection_new ( S2N_SERVER );
if ( conn == NULL ) {
... error ...
}
/* Associate a connection with a file descriptor */
if ( s2n_connection_set_fd ( conn , fd ) < 0 ) {
... error ...
}
/* Negotiate the TLS handshake */
s2n_blocked_status blocked ;
if ( s2n_negotiate ( conn , & blocked ) < 0 ) {
... error ...
}
/* Write data to the connection */
int bytes_written ;
bytes_written = s2n_send ( conn , "Hello World" , sizeof ( "Hello World" ), & blocked );
Untuk detail tentang membangun perpustakaan s2n-tls dan cara menggunakan s2n-tls dalam aplikasi yang Anda kembangkan, lihat Panduan Penggunaan.
s2n-tls mengimplementasikan SSLv3, TLS1.0, TLS1.1, TLS1.2, dan TLS1.3. Untuk enkripsi, s2n-tls mendukung AES 128-bit dan 256-bit dalam mode CBC dan GCM, ChaCha20, 3DES, dan RC4. Untuk kerahasiaan ke depan, s2n-tls mendukung DHE dan ECDHE. s2n-tls juga mendukung ekstensi TLS Indikator Nama Server (SNI), Negosiasi Protokol Lapisan Aplikasi (ALPN), dan Protokol Status Sertifikat Online (OCSP). SSLv3, RC4, 3DES, dan DHE masing-masing dinonaktifkan secara default untuk alasan keamanan.
Karena sulit untuk melacak algoritme dan protokol enkripsi mana yang terbaik untuk digunakan, s2n-tls memiliki fitur API sederhana untuk menggunakan rangkaian preferensi "default" terbaru. Jika Anda memilih untuk tetap menggunakan versi tertentu untuk kompatibilitas mundur, itu juga didukung.
/* Use the latest s2n-tls "default" set of ciphersuite and protocol preferences */
s2n_config_set_cipher_preferences ( config , "default" );
/* Use a specific set of preferences, update when you're ready */
s2n_config_set_cipher_preferences ( config , "20150306" )
Secara internal, s2n-tls mengambil pendekatan sistematis terhadap perlindungan data dan mencakup beberapa mekanisme yang dirancang untuk meningkatkan keselamatan.
Kode s2n-tls disusun dan ditulis dengan fokus pada kemampuan peninjauan. Semua kode s2n-tls tunduk pada peninjauan kode, dan kami berencana untuk menyelesaikan evaluasi keamanan s2n-tls setiap tahun.
Sampai saat ini ada dua tinjauan tingkat kode eksternal terhadap s2n-tls, termasuk satu yang dilakukan oleh vendor keamanan komersial. s2n-tls juga telah dibagikan dengan beberapa anggota tepercaya dari komunitas kriptografi, keamanan, dan Sumber Terbuka yang lebih luas. Setiap masalah yang ditemukan selalu dicatat dalam pelacak masalah s2n-tls.
Selain tinjauan kode, s2n-tls tunduk pada analisis statis reguler, pengujian fuzz, dan pengujian penetrasi. Beberapa uji penetrasi telah dilakukan, termasuk dua yang dilakukan oleh vendor komersial.
s2n-tls mencakup pengujian unit positif dan negatif serta kasus pengujian ujung ke ujung.
Cakupan pengujian unit dapat dilihat di sini. Perhatikan bahwa ini mewakili cakupan unit untuk bangunan tertentu. Karena build tersebut belum tentu mendukung semua fitur s2n-tls, cakupan pengujian mungkin diturunkan secara artifisial.
s2n-tls mengenkripsi atau menghapus data teks biasa secepat mungkin. Misalnya, buffer data yang didekripsi akan dihapus saat dibaca oleh aplikasi.
s2n-tls menggunakan fitur sistem operasi untuk melindungi data agar tidak ditukar ke disk atau muncul di dump inti.
s2n-tls menghindari penerapan opsi dan ekstensi yang jarang digunakan, serta fitur dengan riwayat memicu kerentanan tingkat protokol. Misalnya, tidak ada dukungan untuk DTLS.
Keamanan TLS dan algoritme enkripsi terkait bergantung pada pembuatan nomor acak yang aman. s2n-tls menyediakan setiap thread dengan dua generator nomor acak terpisah. Satu untuk data "publik" yang dihasilkan secara acak yang mungkin tampak jelas, dan satu lagi untuk data "pribadi" yang harus tetap dirahasiakan. Pendekatan ini mengurangi risiko potensi kelemahan prediktabilitas dalam algoritma pembangkitan angka acak akibat kebocoran informasi lintas konteks.
s2n-tls telah disusun sehingga perpustakaan enkripsi yang berbeda dapat digunakan. Saat ini s2n-tls mendukung AWS-LC, OpenSSL (versi 1.0.2, 1.1.1 dan 3.0.x), LibreSSL, dan BoringSSL untuk melakukan operasi kriptografi yang mendasarinya. Periksa dokumentasi build libcrypto untuk mengetahui daftar fitur khusus libcrypto.
s2n-tls menyertakan dukungan terstruktur untuk membutakan saluran samping berbasis waktu yang mungkin membocorkan data sensitif. Misalnya, jika s2n-tls gagal mengurai data TLS atau pesan jabat tangan, s2n-tls akan menambahkan penundaan acak antara 10 dan 30 detik, granular hingga nanodetik, sebelum merespons. Hal ini meningkatkan kompleksitas serangan saluran samping waktu di dunia nyata setidaknya sebesar puluhan triliun kali lipat.
s2n-tls menggunakan tabel sederhana untuk menggerakkan mesin status TLS/SSL, sehingga menyulitkan munculnya status rusak yang tidak valid.
s2n-tls ditulis dalam C, tetapi memanfaatkan fungsi pustaka C standar dengan ringan dan menggabungkan semua penanganan memori, penanganan string, dan serialisasi dalam pemeriksaan penegakan batas yang sistematis.
Jika Anda menemukan potensi masalah keamanan di s2n-tls, kami meminta Anda memberi tahu Keamanan AWS melalui halaman pelaporan kerentanan kami. Tolong jangan membuat masalah github publik.
Jika Anda mengemas atau mendistribusikan s2n-tls, atau menggunakan s2n-tls sebagai bagian dari layanan multi-pengguna yang besar, Anda mungkin memenuhi syarat untuk mendapatkan pemberitahuan awal tentang rilis s2n-tls di masa mendatang. Silakan hubungi [email protected].
Jika Anda tertarik untuk berkontribusi pada s2n-tls, silakan lihat panduan pengembangan kami.
Lihat daftar pengikatan bahasa kami untuk pengikatan bahasa untuk s2n-tls yang kami ketahui.