Seperti yang Anda temukan, Anda dapat menonaktifkan verifikasi sertifikat di level handshake SSL / TLS dalam Apache Httpd dengan menggunakan SSLVerifyCLient optional_no_ca
.
Masalah kedua yang akan Anda hadapi dengan apa yang Anda coba lakukan adalah membuat klien mengirim sertifikat. Karena sertifikat Anda tidak dimaksudkan untuk berada dalam PKI, sertifikat itu dapat ditandatangani sendiri dan memiliki berbagai penerbit.
Saat meminta sertifikat klien, server mengirim CertificateRequest
pesan TLS ke klien selama handhsake. Pesan ini berisi certificate_authorities
daftar:
Daftar nama dibedakan dari otoritas sertifikat yang dapat diterima. Nama-nama dibedakan ini dapat menentukan nama dibedakan yang diinginkan untuk CA akar atau untuk CA bawahan; dengan demikian, pesan ini dapat digunakan untuk menggambarkan akar yang diketahui dan ruang otorisasi yang diinginkan. Jika daftar Certificate_authorities kosong maka klien DAPAT mengirim sertifikat dari ClientCertificateType yang sesuai, kecuali ada pengaturan eksternal yang bertentangan.
Browser menggunakan ini untuk memilih sertifikat klien mana yang akan dikirim (jika ada).
(Perhatikan bahwa bagian tentang daftar kosong hanya dalam spesifikasi dari TLS 1.1 dan seterusnya. SSL 3.0 dan TLS 1.0 tidak membahas hal ini, dan dalam praktiknya, ini juga akan berfungsi.)
Anda mendapatkan dua opsi untuk ini.
Jika sertifikat klien yang Anda harapkan akan ditandatangani sendiri, mereka semua akan memiliki penerbit yang berbeda. Karena Anda tidak akan tahu apa yang diharapkan, server harus mengirim daftar kosong. Untuk melakukan ini, gunakan SSLCADNRequestFile
arahan dan arahkan ke file yang hanya berisi baris kosong (jika saya ingat betul, itu tidak bekerja dengan file yang benar-benar kosong).
Opsi kedua (kurang bersih). Adalah menyetujui DN Penerbit yang umum untuk semua sertifikat klien yang Anda harapkan, terlepas apakah sertifikat tersebut memang dikeluarkan oleh sertifikat CA tersebut (atau apakah CA itu ada atau tidak). Dengan melakukannya, Anda akan sangat melanggar model PKI (lebih banyak).
Jika Anda menyetujui DN yang disukai Penerbit CN=Dummy CA
(misalnya). Siapa pun dapat membuat sertifikat yang ditandatangani sendiri menggunakan CN=Dummy CA
DN Subjek (dan Penerbit DN), mungkin dengan kunci yang berbeda. Meskipun SSLCADNRequestFile
arahan berharap untuk dikonfigurasikan dengan sertifikat untuk membangun daftar, ini tidak digunakan untuk memverifikasi sertifikat klien sama sekali, itu hanya cara yang rumit (tapi alami dalam konteks arahan lain) untuk mengkonfigurasi certificate_authorities
daftar. Jika Anda, sebagai layanan, memasukkan sertifikat yang ditandatangani sendiri dengan nama-nama SSLCADNRequestFile
ini, ini akan membuat CertificateRequest
pesan TLS digunakan CN=Dummy CA
dalam certificate_authorities
daftar (ini hanya nama, bukan sertifikat pada tahap ini). Klien kemudian dapat mengambil sertifikatnya sendiri dengan Penerbit DNCN=Dummy CA
, apakah tanda tangannya dapat diverifikasi oleh sertifikat itu (kunci yang sama) atau tidak, karena tidak ada verifikasi tanda tangan yang terlibat dalam langkah-langkah ini.
Makhluk ini berkata, ingatlah bahwa dengan SSLVerifyCLient optional_no_ca
, tidak ada verifikasi sertifikat nyata yang dibuat (saya kira Anda dapat memeriksa SSL_CLIENT_VERIFY
variabel jika verifikasi manual Anda hanyalah solusi cadangan untuk PKI yang telah Anda konfigurasikan pula). Yang Anda akan tahu pada tahap itu adalah bahwa klien memiliki kunci pribadi untuk sertifikat kunci publik yang telah disajikan (dijamin oleh CertificateVerify
pesan TLS ): Anda harus melakukan beberapa bentuk verifikasi jika Anda ingin ada otentikasi beberapa menyortir. (Anda tidak dapat mempercayai salah satu konten sertifikat, yang merupakan salah satu dari pengikatan antara kunci publik dan nama / atribut yang dikandungnya.)
Ini tidak akan berfungsi dengan baik untuk file, tetapi Anda bisa melakukan ini untuk aplikasi (mis. PHP / CGI / ... bahkan Java jika Anda meneruskan sertifikat ke server Java yang diproksi). Salah satu cara dasar adalah dengan memiliki daftar kunci publik yang sudah diketahui, atau Anda bisa melihat ide-ide di FOAF + SSL / WebID .