如果没有tls_checkpeer,pam_ldapconfiguration中的CA根证书将不起作用

系统是相同configuration的Debian Squeeze和Ubuntu Precise。 在两个发行版中,libpam-ldap的版本是184-8.5。

/etc/pam_ldap.conf ,以下configuration一切正常。

 host 10.220.100.11 base ou=companies,ou=asp,ou=sweden,dc=domain,dc=inet ldap_version 3 ssl on tls_checkpeer no binddn svc_unix_auth bindpw secret scope sub timelimit 30 pam_filter objectclass=User nss_map_attribute uid sAMAccountName pam_login_attribute sAMAccountName pam_password crypt pam_groupdn CN=Linux_Authentication,OU=Groups,OU=ourcompany,OU=Companies,OU=ASP,OU=sweden,DC=domain,DC=inet 

/etc/pam.d/common-auth ,只有一个更改为pamconfiguration。

 auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so use_first_pass 

第二行是为了启用ldaplogin而添加的内容。

只要我们从文件/etc/pam_ldap.conf删除tls_checkpeer no ,它就会失败,因为LDAP服务器具有自签名证书。

尝试从LDAP服务器以base64格式导出根CA证书,并将其放在/ etc / ssl / certs中,使用0644权限。 然后在pam_ldap.conf添加tls_cacertfile /etc/ssl/certs/ldap_server.crt ,但是这不起作用。

如何使用根CA并避免禁用自签名证书的检查?

据我所知,pam_ldap使用openssl作为其TLSfunction,或使用内置于pam_ldap本身的类似function。 openssl需要ca文件的名称作为主题的散列值,后跟“.0”,或者如果已经有另外一个带有该散列的ca证书,则将0递增为1或2,或者下一个未使用的数字将是。 通常build议您使用友好名称保留实际的CA证书文件名,以便知道它是什么,并创build一个具有名称的符号链接,该名称使用主题的散列,后跟“.0”或者下一个可用的号码是什么。 要find哈希:

 openssl x509 -hash /etc/ssl/certs/ldap_server.crt 

这将返回一个hex数字,例如ea12345。

要创build一个openssl和pam_ldap会喜欢的符号链接:

 ln -s /etc/ssl/certs/ldap_server.crt /etc/ssl/certs/ea12345.0 

然后删除“tls_cacertfile /etc/ssl/certs/ldap_server.crt”行,并在其位置添加一行“tls_cacertdir / etc / ssl / certs /”。 当LDAP服务器提供服务器证书时,它将散列CA的主题名称,并尝试通过ea12345.0作为名称查找CA证书文件,这将find符号链接并能够打开该文件。