安全套接字层(SSL)是一种行业标准协议,它使用对称密钥和公用密钥加密机制在Internet上提供安全通信。 SSL协议在TCP / IP之上和应用协议(例如轻型目录访问协议(LDAP)和超文本传输协议(HTTP))之下运行,并为传输数据提供信任和隐私。 在配置集中式数据库的安全性设置期间,管理员可能希望实施用于访问目录数据库的其他安全性措施。 AIX通过IBM Tivoli Directory Server(ITDS)支持SSL安全性。 安装和配置证书后,客户端可以通过安全(636)端口和不安全端口(389)进行通信。
在普通的LDAP连接中,客户端连接到端口389,并且信息交换采用纯文本格式。 无法保证将LDAP客户端连接到正确的LDAP服务器。 黑客可以感染您的DNS,或者他们可以在正确的计算机上安装自己的服务器。
将SSL与ITDS结合使用可以潜在地解决这些漏洞。
首先,SSL可以解决验证您已连接到正确服务器的问题。 当客户端和服务器连接时,它们执行特殊的SSL“握手”,其中一部分涉及服务器和客户端交换加密密钥,这些密钥使用X.509证书进行描述。 如果客户端希望确认它已连接到正确的服务器,则需要验证服务器的证书,该证书是在握手中发送的。 可以通过检查证书是否由您信任的人签名(受信任)以及证书是否已被吊销来完成。 例如,服务器的证书可能已由Verisign(www.verisign.com)签名,并且您决定要信任Verisign签署合法证书。
启用SSL后,客户端和LDAP注册表之间交换的数据将被加密。 支持服务器身份验证和客户端身份验证。
对于服务器身份验证,ITDS在初始SSL握手期间会向客户端提供ITDS X.509证书。 如果客户端验证服务器的证书(如图1所示),则将在ITDS与客户端应用程序之间建立安全的加密通信通道。
让我们将图1所示的服务器身份验证分为两部分:
配置IBM Tivoli Directory Server以进行SSL访问 配置IBM Tivoli Directory Server客户机以进行SSL访问需要以下步骤才能为服务器验证启用对ITDS的SSL支持:
创建一个密钥数据库(CMS),以包含服务器证书以及服务器的私钥和公钥。 # gsk7cmd -keydb -create -db $SRVKEY_PATH/serverkey -pw $SRVKEY_PASSWD -type cms -stash成功完成上述命令后,创建了四个文件:
serverkey.kdb-该文件是密钥数据库本身。 serverkey.rdb-此文件用于存储证书请求。 serverkey.crl-此文件用于保存证书吊销列表。 serverkey.sth-此文件存储密码的加密版本。 创建一个自签名证书并提取该证书,并使它可在与服务器安全通信的所有客户端系统上使用。 # gsk7cmd -cert -create -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD -label \ $SRV_LABEL -dn "CN=`hostname`,O=IBM,C= INDIA" -default_cert yes -expire 999只能在测试或Intranet环境中创建和使用自签名证书。 在生产或Internet环境中,请从公认的证书颁发机构(CA)(例如Verisign)获得商业证书。
检查keydb中SRV_CERT证书的可用性。 请参见下面的代码清单。
# gsk7cmd -cert -list -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD Certificates in database: /var/adm/ras/SSLKey_SRV/serverkey.kdb Entrust.net Global Secure Server Certification Authority Entrust.net Global Client Certification Authority Entrust.net Client Certification Authority Entrust.net Certification Authority (2048) Entrust.net Secure Server Certification Authority VeriSign Class 3 Secure Server CA VeriSign Class 3 Public Primary Certification Authority VeriSign Class 2 Public Primary Certification Authority VeriSign Class 1 Public Primary Certification Authority VeriSign Class 4 Public Primary Certification Authority - G2 VeriSign Class 3 Public Primary Certification Authority - G2 VeriSign Class 2 Public Primary Certification Authority - G2 VeriSign Class 1 Public Primary Certification Authority - G2 VeriSign Class 4 Public Primary Certification Authority - G3 VeriSign Class 3 Public Primary Certification Authority - G3 VeriSign Class 2 Public Primary Certification Authority - G3 VeriSign Class 1 Public Primary Certification Authority - G3 Thawte Personal Premium CA Thawte Personal Freemail CA Thawte Personal Basic CA Thawte Premium Server CA Thawte Server CA RSA Secure Server Certification Authority -->SRV_CERT 创建自签名证书后,必须提取该证书供与服务器安全通信的客户端系统使用: # gsk7cmd -cert -extract -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD –label \ $SRV_LABEL -target $EXTRACT_PATH/ serverkey.arm –format binary 一旦密钥数据库已准备好使用自签名证书,请配置目录服务器以使用此证书。使用文本编辑器以以下格式创建LDIF file.ldif。
dn: cn=SSL,cn=Configuration changetype: modify replace: ibm-slapdSslAuth ibm-slapdSslAuth: serverAuth - replace: ibm-slapdSecurity ibm-slapdSecurity: SSL dn: cn=SSL,cn=Configuration changetype: modify replace: ibm-slapdSSLKeyDatabase ibm-slapdSSLKeyDatabase: /var/adm/ras/SSLKey_SRV/serverkey.kdb - replace:ibm-slapdSslCertificate ibm-slapdSslCertificate: SRV_CERT - replace: ibm-slapdSSLKeyDatabasePW ibm-slapdSSLKeyDatabasePW: key4server现在将此LDIF文件呈现给目录服务器。
# idsldapmodify -D cn=admin -w admin -i file.ldif -p 389 modifying entry cn=SSL,cn=Configuration modifying entry cn=SSL,cn=Configuration查看/home/ldapdb2/idsslapd-ldapdb2/etc/ibmslapd.conf文件,注意以下箭头所示条目的变化。
dn: cn=SSL, cn=Configuration cn: SSL ibm-slapdSecurePort: 636 #ibm-slapdSecurity must be one of none/SSL/SSLOnly/TLS/SSLTLS -->ibm-slapdSecurity: SSL #ibm-slapdSslAuth must be one of serverAuth/serverClientAuth -->ibm-slapdSslAuth: serverAuth -->ibm-slapdSslCertificate: SRV_CERT ibm-slapdSslCipherSpec: AES ibm-slapdSslCipherSpec: AES-128 ibm-slapdSslCipherSpec: RC4-128-MD5 ibm-slapdSslCipherSpec: RC4-128-SHA ibm-slapdSslCipherSpec: TripleDES-168 ibm-slapdSslCipherSpec: DES-56 ibm-slapdSslCipherSpec: RC4-40-MD5 ibm-slapdSslCipherSpec: RC2-40-MD5 ibm-slapdSslFIPSProcessingMode: false -->ibm-slapdSslKeyDatabase: /var/adm/ras/SSLKey_SRV/serverkey.kdb ibm-slapdSSLKeyDatabasePW: {AES256}5+6hlNHZ8DFvhRRjmRP9GA== objectclass: top objectclass: ibm-slapdConfigEntry objectclass: ibm-slapdSSL 必须停止并重新启动Tivoli Directory Server和管理守护程序,更改才能生效。 a. Stopping directory server. # ibmslapd -k -I "instance name" b. Stopping administrator daemon # ibmdirctl -h host_name -D ldap_admin -w ldap_pw admstop c. Starting administrator daemon # ibmdiradm "instance name" d. Starting directory server # ibmslapd -n -I "instance name"在LDAP服务器上启用SSL访问后,可以在客户端系统上设置SSL访问。 与为服务器创建密钥数据库文件类似,您必须在客户端系统上创建密钥数据库文件。 请注意,要使客户端对LDAP服务器进行身份验证,客户端必须识别为LDAP服务器创建证书的证书颁发机构(CA)。 如果LDAP服务器使用的是自签名证书,则必须启用客户端才能将生成LDAP服务器证书的系统识别为受信任的根(证书颁发机构)。
要配置LDAP客户端以通过SSL访问LDAP服务器,请在客户端计算机上完成以下说明:
使用GSKit密钥管理实用程序创建密钥数据库(CMS)文件。 # gsk7cmd -keydb -create -db $CLIKEY_PATH/clientkey -pw $CLIKEY_PASSWD \ -type cms -stash 将提取的证书文件从LDAP服务器复制到客户端计算机。 # rcp -r $LDAP_SERVER:$SRVKEY_PATH/EXTRACT/ $CLIKEY_PATH/ 将服务器证书(从CA或自签名证书)作为受信任的签名者导入到客户端的密钥数据库中。 输入要添加的签署者证书的标签。 如果证书是由证书颁发机构创建的,则可以使用证书颁发机构的名称作为标签。 对于自签名证书,请使用LDAP服务器的名称作为标签。 # gsk7cmd -cert -add -db $CLIKEY_PATH/clientkey.kdb -pw $CLIKEY_PASSWD -label \ $LDAP_SERVER -file $CLIKEY_PATH/serverkey.arm列出添加的证书并进行验证。
# gsk7cmd -cert -list -db $CLIKEY_PATH/clientkey.kdb -pw $CLIKEY_PASSWD Certificates in database: /var/adm/ras/SSLKey_CLI/clientkey.kdb -->fluffy01 Entrust.net Global Secure Server Certification Authority Entrust.net Global Client Certification Authority Entrust.net Client Certification Authority Entrust.net Certification Authority (2048) Entrust.net Secure Server Certification Authority VeriSign Class 3 Secure Server CA VeriSign Class 3 Public Primary Certification Authority VeriSign Class 2 Public Primary Certification Authority VeriSign Class 1 Public Primary Certification Authority VeriSign Class 4 Public Primary Certification Authority - G2 VeriSign Class 3 Public Primary Certification Authority - G2 VeriSign Class 2 Public Primary Certification Authority - G2 VeriSign Class 1 Public Primary Certification Authority - G2 VeriSign Class 4 Public Primary Certification Authority - G3 VeriSign Class 3 Public Primary Certification Authority - G3 VeriSign Class 2 Public Primary Certification Authority - G3 VeriSign Class 1 Public Primary Certification Authority - G3 Thawte Personal Premium CA Thawte Personal Freemail CA Thawte Personal Basic CA Thawte Premium Server CA Thawte Server CA RSA Secure Server Certification Authority CLI_CERT 要测试是否已启用SSL访问,请在LDAP客户端系统上输入以下命令: # idsldapsearch -h $LDAP_SERVER -Z -K $CLIKEY_PATH/clientkey.kdb -P $CLIKEY_PASSWD \ -b "" -s base objectclass=*由于ITDS允许多个实例,因此,如果不使用默认的636安全端口,则需要指定端口号。 安全端口636正在LDAP服务器上侦听SSL请求。 由于已为服务器启用SSL和非SSL请求,因此在上述命令输出中也请注意值389。
要设置客户机以使用SSL与LDAP服务器对话,请输入: # mksecldap -c -h $LDAP_SERVER -a cn=admin -p admin -d o=ibm -k $CLIKEY_PATH/ \ clientkey.kdb -w $CLIKEY_PASSWD在客户端安装的最后步骤中,mksecldap命令启动客户端守护程序,并在/ etc / inittab文件中添加一个条目,以便该守护程序在每次重新启动时启动。 您可以通过ls-secldapclntd命令检查secldapclntd守护进程来检查设置是否成功。
# ls-secldapclntd ldapservers=fluffy01 ldapport=636 ldapversion=3 userbasedn=ou=People,o=ibm groupbasedn=ou=Groups,o=ibm idbasedn=ou=system,o=ibm usercachesize=1000 usercacheused=0 groupcachesize=100 groupcacheused=0 usercachetimeout=300 groupcachetimeout=300 heartbeatT=300 numberofthread=10 connectionsperserver=10 alwaysmaster=no authtype=UNIX_AUTH searchmode=ALL defaultentrylocation=LDAP ldaptimeout=60 userobjectclass=posixaccount,account,shadowaccount,aixauxaccount, ibm-securityIdentities groupobjectclass=posixgroup,aixauxgroup此步骤完成了用于服务器身份验证的SSL。
这种身份验证在LDAP客户端和LDAP服务器之间提供双向握手。 必须在客户端系统上建立证书,以便客户端对服务器进行身份验证之后,服务器会请求客户端的证书并将其用于身份验证客户端的身份。
要为客户端系统建立证书,请执行以下操作:
在客户端上创建密钥数据库(CMS)文件。 # gsk7cmd -keydb -create -db $CLIKEY_PATH/clientkey -pw $CLIKEY_PASSWD -type cms -stash 在密钥数据库上创建个人证书及其关联的私钥。 该个人证书表示SSL通信期间Tivoli Directory Server客户机系统的身份。 # gsk7cmd -cert -create -db $CLIKEY_PATH/clientkey.kdb -pw $CLIKEY_PASSWD -label \ $CLI_LABEL -dn "CN=`hostname`,O=IBM,C=INDIA" 列出来自keydb的证书。 # gsk7cmd -cert -list -db $CLIKEY_PATH/clientkey.kdb -pw $CLIKEY_PASSWD Certificates in database: /var/adm/ras/SSLKey_CLI/clientkey.kdb fluffy01 Entrust.net Global Secure Server Certification Authority Entrust.net Global Client Certification Authority Entrust.net Client Certification Authority Entrust.net Certification Authority (2048) Entrust.net Secure Server Certification Authority VeriSign Class 3 Secure Server CA VeriSign Class 3 Public Primary Certification Authority VeriSign Class 2 Public Primary Certification Authority VeriSign Class 1 Public Primary Certification Authority VeriSign Class 4 Public Primary Certification Authority - G2 VeriSign Class 3 Public Primary Certification Authority - G2 VeriSign Class 2 Public Primary Certification Authority - G2 VeriSign Class 1 Public Primary Certification Authority - G2 VeriSign Class 4 Public Primary Certification Authority - G3 VeriSign Class 3 Public Primary Certification Authority - G3 VeriSign Class 2 Public Primary Certification Authority - G3 VeriSign Class 1 Public Primary Certification Authority - G3 Thawte Personal Premium CA Thawte Personal Freemail CA Thawte Personal Basic CA Thawte Premium Server CA Thawte Server CA RSA Secure Server Certification Authority -->CLI_CERT 创建自签名证书后,必须提取该证书以在将与客户端安全通信的LDAP服务器系统上使用。 # gsk7cmd -cert -extract -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD –label $SRV_LABEL -target $EXTRACT_PATH/ serverkey.arm –format binary将客户机证书提取到文件中之后,必须使该文件在Tivoli Directory Server上可用。
现在,将提取的客户端证书作为受信任的签名者添加到服务器系统的密钥数据库中。将客户端证书通过FTP传输到服务器计算机。
# gsk7cmd -cert -add -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD \ -label $CLI_NAME -file $PATH/clientkey.arm 输入要创建的证书的标签。 如果您使用的是自签名证书,请使用客户端名称以确保唯一性列出服务器keydb中的证书,并验证客户端证书。
# gsk7cmd -cert -list -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD Certificates in database: /var/adm/ras/SSLKey_SRV/serverkey.kdb -->charleston01 Entrust.net Global Secure Server Certification Authority Entrust.net Global Client Certification Authority Entrust.net Client Certification Authority Entrust.net Certification Authority (2048) Entrust.net Secure Server Certification Authority VeriSign Class 3 Secure Server CA VeriSign Class 3 Public Primary Certification Authority VeriSign Class 2 Public Primary Certification Authority VeriSign Class 1 Public Primary Certification Authority VeriSign Class 4 Public Primary Certification Authority - G2 VeriSign Class 3 Public Primary Certification Authority - G2 VeriSign Class 2 Public Primary Certification Authority - G2 VeriSign Class 1 Public Primary Certification Authority - G2 VeriSign Class 4 Public Primary Certification Authority - G3 VeriSign Class 3 Public Primary Certification Authority - G3 VeriSign Class 2 Public Primary Certification Authority - G3 VeriSign Class 1 Public Primary Certification Authority - G3 Thawte Personal Premium CA Thawte Personal Freemail CA Thawte Personal Basic CA Thawte Premium Server CA Thawte Server CA RSA Secure Server Certification Authority -->SRV_CERT LDAP服务器识别出创建客户端个人证书的证书颁发机构后,请在LDAP客户端上使用以下命令测试SSL访问。 # idsldapsearch -h server_name -Z -K $CLIKEY_PATH/clientkey.kdb -P \ $CLIKEY_PASSWD -N $CLI_LABEL -b "" -s base objectclass=*SSL设置现已完成。
创建新的密钥数据库时,请指定密钥数据库密码。 该密码保护私钥,并且是唯一可以签署文档或解密使用公钥加密的消息的密钥。 优良作法是经常更改密钥数据库密码。
要更改数据库密码,请键入:
# gsk7cmd -keydb -changepw -db $SRVKEY_PATH/serverkey.kdb -pw $SRVKEY_PASSWD \ -new_pw newpassw0rd -stash您还必须更新ibmslapd.conf文件中的密码。
在/home/ldapdb2/idsslapd-ldapdb2/etc/ibmslapd.conf搜索以下关键字,并将其替换为文本格式的新密码。
ibm-slapdSSLKeyDatabasePW: newpassw0rd您必须重新启动ibmslapd进程才能使新密码生效。
# ibmslapd -k; ibmslapd -n下面的代码显示了如何在密钥数据库中显示证书列表及其到期日期:
# gsk7cmd -cert -list -expiry -db $CLIKEY_PATH/clientkey.kdb -pw \ $CLIKEY_PASSWD -type cms Certificates in database: /var/adm/ras/SSLKey_CLI/clientkey.kdb COFFEE Validity Not Before: Wed Nov 28 02:43:42 CST 2007 Not After: Fri Nov 30 02:43:42 CST 2007 VeriSign Class 2 OnSite Individual CA Validity Not Before: Mon May 18 19:00:00 CDT 1998 Not After: Mon Oct 12 18:59:59 CDT 2009 VeriSign International Server CA - Class 3 Validity Not Before: Wed Apr 16 19:00:00 CDT 1997 Not After: Mon Oct 24 18:59:59 CDT 2011 Verisign Class 3 Public Primary Certification Authority - G2 Validity Not Before: Sun May 17 19:00:00 CDT 1998 Not After: Tue Aug 01 18:59:59 CDT 2028 Verisign Class 2 Public Primary Certification Authority - G2 Validity Not Before: Sun May 17 19:00:00 CDT 1998 Not After: Tue Aug 01 18:59:59 CDT 2028使用-expiry指定天数是可选的,尽管使用时会显示在该天数内到期的所有证书。 要列出已经过期的证书,请输入值0 。
要显示整个键条目,请键入以下内容:
# gsk7cmd -cert -details -showOID -db $CLIKEY_PATH/clientkey.kdb \ -pw $CLIKEY_PASSWD -label COFFEE如果证书已过期,请执行以下步骤:
在LDAP服务器上创建一个新证书。 从密钥库中删除过期的证书。 配置LDAP服务器以使用新证书。 重新启动ibmdiradm和ibmslapd。 提取证书并将新证书提供给所有客户端密钥存储。IBM Tivoli Directory Server除操作系统工具外还包含其他工具,可帮助您确定遇到的问题的根源。
错误日志记录在目录服务器处理期间发生的错误消息。 IBM Tivoli Directory Server检测到这些错误并将其保存在文本文件中。
默认情况下,所有日志位于以下位置:
"instance home"/idsslapd-"instance name"/logs对于ldapdb2实例,配置文件和日志位于以下位置:
# /home/ldapdb2/idsslapd-ldapdb2/etc/ibmslapd.conf # /home/ldapdb2/idsslapd-ldapdb2/logs/ adminaudit.log bulkload.log db2clicmds.log ibmslapd.log lostandfound.log audit.log db2cli.log ibmdiradm.log idstools.log traceibmslapd.log这是该日志的示例:
11/16/07 06:50:30 GLPCTL115I Maximum data segment limit for the process (in bytes): '1073741312'(Soft limit) and '-1'(Hard limit). 11/16/07 06:50:30 GLPCTL116I Maximum physical memory limit for the process (in bytes): '1073741312'(Soft limit) and '-1'(Hard limit). 11/16/07 06:50:30 GLPSRV009I IBM Tivoli Directory (SSL), 6.0 Server started. 11/16/07 06:50:30 GLPSRV048I Started 15 worker threads to handle client requests.下面讨论了一些常见的证书问题。
问题1: GLPCOM003I Non-SSL port initialized to 389. GLPCOM004I SSL port initialized to 636. GLPSSL002E File I/O error on opening SSL key database file $SRVKEY_PATH/serverkey.kdb. GLPSRV004I Terminating server.如果无法读取或无法使用LDAP目录和管理服务器使用的SSL密钥数据库,则上述错误会增加。 验证密钥数据库文件的名称和路径,并更新ibmslapd.conf文件以反映密钥数据库文件的正确标准路径。 重新启动服务器。
问题2: # idsldapsearch -h `hostname` -Z -K SRVKEY_PATH/serverkey.kdb -P badpassw0rd \ -b "" -s base objectclass=* ldap_ssl_client_init failed! rc == 113, failureReasonCode == 408 Bad keyfile password在这种情况下,请检查您的密钥数据库密码。
问题3: # idsldapsearch -h `hostname` -Z -K $CLIKEY_PATH/badkey.kdb -P $CLIKEY_PASSWD \ -b "" -s base objectclass=* ldap_ssl_client_init failed! rc == 113, failureReasonCode == 202 Keyring file open error验证客户端密钥数据库名称。 或者指定的客户端密钥数据库不存在。
问题4: # idsldapsearch -h `hostname` -Z -K $CLIKEY_PATH/clientkey.kdb -P \ $CLIKEY_PASSWD -b "" -s base objectclass=* ldap_ssl_client_init failed! rc == 113, failureReasonCode == 102 Keyfile I/O error指定了错误的客户端密钥数据库。 客户端证书找不到内部密钥数据库。
问题5: # mksecldap -c -h coffee -a cn=admin -p admin -d o=ibm -k $CLIKEY_PATH/clientkey.kdb \ -w $CLIKEY_PASSWD Cannot contact LDAP server coffee. client presetup check failed.ibmslapd进程未在服务器端运行。 使用ibmslapd -n启动它,然后重试。
在AIX中为LDAP目录配置安全设置期间,管理员可能希望实施其他安全措施以访问ITDS。 AIX提供SSL安全性,这是基于LDAP的基于证书的认证机制。 本文概述了AIX 5L操作系统上ITDS 6.0的SSL配置。 介绍了用于SSL密钥数据库创建,证书创建,证书提取,对SSL身份验证机制的理解,对SSL问题的故障排除以及用于LDAP客户端-服务器通信的方法的分步命令行配置过程。
翻译自: https://www.ibm.com/developerworks/aix/library/au-sslconfig/index.html