Toleransi stres perpustakaan OpenSSL

Rekan kerja dan saya mempunyai perasaan yang baik bahwa OpenSSL kurang lebih perlu di-pitch dari aplikasi kami, tetapi saya ingin beberapa pendapat mengenai apakah ini benar-benar buruk atau apakah ada masalah dalam penggunaan perpustakaan ini yang dapat menyebabkan masalah bagi kami.

Pengaturan: Aplikasi C++ multi-utas yang memelihara koneksi SSL persisten untuk setiap pengguna.

Pada 500 pengguna, ini telah berfungsi dengan baik. Saya mencoba meningkatkan batas menjadi 1000 dan sekitar 960 mengalami segfault di SSL_read. Pembacaan ini adalah operasi I/O pertama untuk koneksi khusus ini. Saya harus meningkatkan batas file di ulimit dari 1024 menjadi 4096 untuk mencapai setinggi ini. Jadi pertanyaan saya adalah:

1) Apakah mungkin perpustakaan perlu dikonfigurasi agar dapat menerima koneksi sebanyak ini?

2) Apakah ini masalah threading yang dapat diselesaikan dengan penggunaan mutex yang ringan? Saya tidak mampu mengubah seluruh SSL_read menjadi strip kritis.

3) Hanya perpustakaan buggy yang buruk dan perlu dibuang?


person djechlin    schedule 13.06.2012    source sumber
comment
OpenSSL berfungsi dengan baik di banyak aplikasi. Versi apa yang Anda gunakan?   -  person Fred Foo    schedule 13.06.2012
comment
Sepertinya OpenSSL 1.0.0-fips 29 Mar 2010   -  person djechlin    schedule 13.06.2012
comment
Bagaimana multithreading terlibat?   -  person Brady    schedule 13.06.2012
comment
openssl digunakan dalam banyak sekali aplikasi, yang banyak di antaranya pasti memiliki persyaratan lebih tinggi daripada aplikasi Anda, dan semuanya tampaknya berjalan sangat stabil. Bahkan jika Anda menemukan bug (dan saya ragu Anda menemukannya), apa yang ingin Anda gunakan sebagai alternatif?   -  person PlasmaHH    schedule 13.06.2012
comment
@Brady - Satu utas per koneksi. Begitu juga dengan akses baca/tulis secara bersamaan.   -  person djechlin    schedule 13.06.2012
comment
@PlasmaHH - Rekan kerja menemukan beberapa perpustakaan lain yang saya tidak bersemangat untuk menerapkannya sampai saya tahu saya menggunakan openssl dengan benar... maka dari itu posting saya di sini.   -  person djechlin    schedule 13.06.2012
comment
@djechlin: Untuk menilai apakah Anda menggunakan openssl dengan benar, kami perlu mengetahui cara Anda menggunakannya. Testcase mandiri yang dapat dikompilasi akan ideal untuk itu.   -  person PlasmaHH    schedule 13.06.2012
comment
Bisakah kita melihat jejak tumpukan segfault?   -  person Brady    schedule 13.06.2012
comment
Saya hanya memiliki pelacakan tumpukan hingga openssl.so. Saya dapat mencoba mengkompilasi perpustakaan dengan -g dari awal untuk melihat apa yang terjadi di dalamnya? Sedangkan untuk kode contoh kecil, saya tidak yakin betapa mudahnya saya dapat memproduksinya. Ini adalah segfault yang hanya terjadi ketika saya memiliki banyak hal yang terbang di atas koneksi - ini berjalan dengan sempurna pada @ 500 pengguna dan gagal pada @ 1000.   -  person djechlin    schedule 13.06.2012
comment
Sudahkah Anda membaca halaman dokumentasi OpenSSL tentang threading dan sudahkah Anda memberikan OpenSSL panggilan balik ke fungsi penguncian Anda? openssl.org/docs/crypto/threads.html   -  person indiv    schedule 13.06.2012
comment
@indiv - Ya. Saya baru saja meninjau kode yang saya lakukan dan terlihat sempurna.   -  person djechlin    schedule 13.06.2012
comment
OpenSSL dikirimkan sebagai bagian dari server HTTP Apache, OpenLDAP, dan lusinan paket perangkat lunak standar lainnya. Ini adalah salah satu perpustakaan SSL yang paling banyak digunakan di dunia. Saya menyarankan kesulitan Anda lebih bersifat lokal ;-)   -  person user207421    schedule 14.06.2012


Jawaban (1)


Berdasarkan komentar Anda, 1 thread per koneksi sepertinya bukan penggunaan thread yang efisien.

Saya akan menyarankan kumpulan thread dan menggunakan thread pekerja untuk menangani paket yang diterima. Paket yang diterima dapat dimasukkan ke dalam antrian dan thread pekerja akan memproses paket dari antrian. Koneksi openSsl dapat disimpan dalam wadah yang umum untuk semua thread. Kehati-hatian harus diberikan untuk menangani paket secara berurutan. Dan ya, sinkronisasi (mutex) diperlukan.

person Brady    schedule 13.06.2012
comment
Baiklah, mari kita lihat apakah itu mungkin di aplikasi saya - stackoverflow.com/questions/11018776/ - person djechlin; 13.06.2012