Ssl
如何啟用 OpenLDAP 伺服器信任來自客戶端的自簽名證書?
我正在使用 JNDI 通過以下程式碼通過 ldaps 連接到遠端 OpenLDAP 伺服器:
Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.SECURITY_AUTHENTICATION, connectionType); env.put(Context.PROVIDER_URL, ldapUrl); env.put(Context.SECURITY_PRINCIPAL, userDn); env.put(Context.SECURITY_CREDENTIALS, password); String truststorePath = "C:\\Software\\OpenSSL-Win64\\CertificateEntityMatching\\truststore.ks"; String keystorePath = "C:\\Software\\OpenSSL-Win64\\CertificateEntityMatching\\keystore.ks"; String keyStorePassword = "123456789"; System.setProperty("javax.net.ssl.trustStore", truststorePath); System.setProperty("javax.net.ssl.keyStore", keystorePath); System.setProperty("javax.net.ssl.keyStorePassword", keyStorePassword); try { InitialLdapContext ldap = new InitialLdapContext(env, null); System.out.println("Connect to LDAP successfully."); return ldap; } catch (AuthenticationException e) { e.printStackTrace(); return null; } catch (NamingException e) { e.printStackTrace(); return null; }
以下是我在 OpenLDAP 伺服器上的 slapd.conf 文件中啟用 TLS 的方法:
# Enable TLS TLSCipherSuite HIGH:MEDIUM:-SSLv2:-SSLv3 TLSVerifyClient demand TLSCertificateFile /usr/local/etc/openldap/tls/certificate.pem TLSCertificateKeyFile /usr/local/etc/openldap/tls/key.pem
伺服器的 certificate.pem 已經添加到我的應用程序的信任庫中,所以如果 TLSVerifyClient 設置為從不,我的應用程序可以成功連接到 LDAP 伺服器。問題是當我將 TLSVerifyClient 設置為要求時,LDAP 伺服器拒絕連接,因為我的應用程序使用自簽名證書:
TLS trace: SSL3 alert write:fatal:unknown CA TLS trace: SSL_accept:error in error TLS: can't accept: error:1417C086:SSL routines:tls_process_client_certificate:certificate verify failed (self signed certificate). 5bd922de connection_read(16): TLS accept failure error=-1 id=1001, closing
誰能指導我如何讓 OpenLDAP 伺服器信任我的應用程序的自簽名證書?OpenLDAP 伺服器是否有類似於“信任庫”的東西?提前致謝。
slapd.conf(5)
TLSCACertificateFile 指定包含 slapd 將辨識的所有證書頒發機構的證書的文件。簽署伺服器證書的 CA 的證書必須包含在這些證書中。
如果簽名 CA 不是頂級(根)CA,則應該存在從簽名 CA 到頂級 CA 的整個 CA 序列的證書。多個證書只是附加到文件中;順序不重要。
TLSCACertificatePath 指定包含單獨文件中的證書頒發機構證書的目錄的路徑。通常只使用其中一個或 TLSCACertificateFile。使用 GnuTLS 時不支持此指令。
使用 Mozilla NSS 時,可能包含 Mozilla NSS 證書/密鑰數據庫。如果包含 Mozilla NSS 證書/密鑰數據庫和 CA 證書文件,OpenLDAP 將使用證書/密鑰數據庫並忽略 CA 證書文件。