Pertama, harap dicatat bahwa saya baru dalam mengkonfigurasi SSL. Di masa lalu, saya selalu beruntung memiliki departemen TI yang menyiapkannya untuk saya sebelumnya. Jadi bersiaplah untuk kemungkinan bahwa saya mungkin perlu meminta klarifikasi atas beberapa jawaban Anda. =)
Apa yang Saya Coba Lakukan
Saya sedang menyiapkan situs web intranet perusahaan untuk karyawan. Misalnya, akan ada halaman awal browser yang menampilkan konten yang disesuaikan untuk setiap karyawan. Oleh karena itu, saya harus dapat mengidentifikasi karyawan tersebut tanpa memerlukan nama pengguna/kata sandi atau perintah lainnya (meskipun pengaturan satu kali tidak masalah; saya hanya tidak ingin mereka diminta setiap saat). Tentu saja, SSL tampaknya menjadi cara terbaik untuk melakukan hal ini.
Saya akan menyiapkan database MySQL untuk mengaitkan akun "pengguna" dengan SSL_CLIENT_M_SERIAL dan SSL_CLIENT_I_DN, yang saya asumsikan akan unik untuk setiap sertifikat klien (?). Saya mendapat ide itu dari artikel ini: http://cweiske.de/tagebuch/ssl-client-certificates.htm
Pertama kali pengguna mengunjungi situs web internal, mereka tidak akan memiliki sertifikat (saya TIDAK ingin membuatnya secara manual untuk klien!), dalam hal ini $_SERVER["SSL_CLIENT_VERIFY"] == "NONE". Jika itu terjadi, maka akan masuk ke halaman pengaturan akun pengguna, yang akan mencakup langkah di mana PHP menghasilkan sertifikat klien SSL dan mengirimkannya ke browser untuk dipasang oleh pengguna. Bagus dan sederhana. Pengguna kemudian menginstal sertifikat, pengaitan dibuat, dan setelah memulai ulang browser (sebagai tambahan), pengguna kembali ke situs web internal.
Pada titik ini, Apache harus meminta sertifikat klien, yang kemudian dikirimkan oleh browser. Skrip PHP kemudian mem-parsing variabel $_SERVER yang diperlukan, membandingkannya dengan database MySQL, dan saat-saat yang menyenangkan telah dinikmati semua orang. Sekali lagi, bagus dan sederhana.
Apa yang Berhasil Sejauh Ini
Saya telah menginstal sertifikat sisi server. Dan ya, itu ditandatangani sendiri (untuk alasan yang jelas). Apache telah menginstal mod_ssl dan semuanya tampaknya berfungsi dengan baik. Saya membuat skrip PHP yang hanya membuang array $_SERVER, dan semua nilai kunci SSL_SERVER_* cocok dengan sertifikat yang saya buat untuk itu.
Masalahnya
Saya tidak bisa membuat sertifikat klien berfungsi! Dalam skrip PHP yang sama, apa pun yang saya lakukan, SSL_CLIENT_VERIFY == "NONE" dan kunci SSL_CLIENT_* lainnya hilang. Inilah yang terjadi jika saya menyetel SSLVerifyClient ke opsional di ssl.conf. Menurut setiap tutorial yang saya baca, semuanya mengatakan bahwa server web harus meminta sertifikat klien kepada browser. Masalahnya, saya tidak bisa melakukan itu! Itu langsung ke skrip PHP dan berasumsi saya tidak memiliki sertifikat klien sama sekali. Ini terjadi di Firefox, Chrome, dan IE.
Jadi saya mencoba menyetel SSLVerifyClient ke wajib dan memulai ulang server web. Dengan adanya opsi itu, saya bahkan tidak dapat membuat koneksi SSL. Firefox hanya mengatakan bahwa koneksi telah disetel ulang (browser lain juga menampilkan versi kesalahannya sendiri). Yang aneh adalah log tidak menunjukkan aktivitas APAPUN pada upaya koneksi ini! Yaitu. access_log, error_log, ssl_access_log, ssl_error_log, DAN ssl_request_log semuanya tidak menampilkan APA SAJA; seolah-olah upaya itu tidak pernah terjadi. Ini membuat frustrasi karena itu berarti saya bahkan tidak mempunyai pesan kesalahan untuk digunakan. Hanya server web yang pasif-agresif menyuruh saya pergi ke neraka.
Saya mencoba membuat/menginstal sertifikat klien saya sendiri secara manual menggunakan ekstensi OpenSSL PHP. Sertifikat terinstal dengan baik, meskipun saya tidak dapat menemukan informasi apa pun tentang cara mengaitkan sertifikat itu dengan server (dengan asumsi saya perlu melakukannya?). Selain itu, tampaknya hal itu tidak menjadi masalah, karena Apache tetap tidak akan meminta sertifikat klien jika opsional disetel. Dan jika require disetel, itu akan meledak tanpa penjelasan. Saya tetap membutuhkannya untuk disetel ke opsional agar skema ini berfungsi.
Lingkungan
OS: CentOS 5.7 64-bit (Kotak Virtual)
Apache: 2.2.3
PHP: 5.3.10
Saya kira Anda mungkin memerlukan info lebih lanjut untuk membantu saya, jadi silakan bertanya! Saya akan menyediakan apa pun yang Anda butuhkan.
Singkatnya, saya perlu mengetahui cara membuat Apache meminta sertifikat klien SSL dengan mempertimbangkan ketentuan yang diuraikan di atas. Selain itu, jika ada penandatanganan khusus/dll yang harus dilakukan untuk membuat sertifikat klien "kompatibel" dengan sertifikat server (sekali lagi, TANPA melakukannya secara manual melalui Shell untuk setiap sertifikat klien!), Saya perlu mengetahuinya sebagai Sehat.
Saya 100% terjebak dalam hal ini sampai sekarang. Tidak dapat menemukan apa pun yang bermanfaat bahkan dari jarak jauh di Google. Bantuan apa pun yang dapat Anda berikan mengenai hal ini akan SANGAT dihargai!! Terima kasih! =)