İstemci sertifikası doğrulaması, bir sunucunun yalnızca kendisini değil bağlanan tarafı da sertifikayla tanımasıdır. Yönetim panelleri, iç API'ler ve B2B entegrasyonlarında parolaya ek olarak ya da parola yerine kullanılır.
Ön hazırlık: küçük bir özel CA
openssl genrsa -out istemci-ca.key 4096
openssl req -x509 -new -key istemci-ca.key -sha256 -days 1825 -subj "/CN=Ornek Istemci CA" -out istemci-ca.crt
openssl genrsa -out ali.key 2048
openssl req -new -key ali.key -subj "/CN=ali" -out ali.csr
openssl x509 -req -in ali.csr -CA istemci-ca.crt -CAkey istemci-ca.key -CAcreateserial -days 365 -sha256 -out ali.crt
openssl pkcs12 -export -inkey ali.key -in ali.crt -out ali.p12
Oluşan .p12 dosyasını kullanıcının tarayıcısına aktarırsınız. CA özel anahtarını güvenli saklayın.
Nginx
ssl_client_certificate /etc/ssl/istemci-ca.crt;
ssl_verify_client on;
ssl_verify_depth 2;
location / {
proxy_set_header X-Client-DN $ssl_client_s_dn;
proxy_pass http://uygulama;
}
ssl_verify_client optional kullanırsanız sertifikasız istemciler de bağlanır; uygulamada $ssl_client_verify değerini kontrol etmeniz gerekir.
Apache
SSLCACertificateFile /etc/ssl/istemci-ca.crt
SSLVerifyClient require
SSLVerifyDepth 2
Doğrulama
curl --cert ali.crt --key ali.key https://panel.ornek.com/
curl https://panel.ornek.com/ # sertifikasız, reddedilmeli
Sık hatalar
- 400 "No required SSL certificate was sent": istemci sertifika göndermedi.
- CA dosyasında ara sertifika eksikliği nedeniyle zincir doğrulanmaz.
- İstemci sertifikasında süre dolması veya eksik Client Authentication kullanımı.
Sunucu sertifikanız için herkese açık CA'dan SSL sertifikası kullanın; istemci sertifikaları için özel CA yeterlidir. Kurulumdan sonra SSL Checker ile sunucu tarafını denetleyin.