配置 OpenLDAP 使用 SSL/TLS 加密数据通信

浏览:
字体:
发布时间:2013-12-17 09:37:13
来源:东方联盟
OpenLDAP OpenSSL 简介
OpenLDAP 是最常用的目录服务之一,它是一个由开源社区及志愿者开发和管理的一个开源项目,提供了目录服务的所有功能,包括目录搜索、身份认证、安全通道、过滤器等等。大多数的 Linux 发行版里面都带有 OpenLDAP 的安装包。OpenLDAP 服务默认使用非加密的 TCP/IP 协议来接收服务的请求,并将查询结果传回到客户端。由于大多数目录服务都是用于系统的安全认证部分比如:用户登录和身份验证,所以它也支持使用基于 SSL/TLS 的加密协议来保证数据传送的保密性和完整性。OpenLDAP 是使用 OpenSSL 来实现 SSL/TLS 加密通信的。
OpenSSL 是 SSL/TLS 加密算法及通信协议的开源实现包,实现了 SSLv2、SSLv3、TLSv1 及 TLSv1.2 的加密算法和通信协议,并提供 API 给第三方应用。第三方应用可以很容易的使用 OpenSSL 来将明文通信加密。OpenLDAP 和 OpenSSL 的互相配合是本文的主要内容,包括:OpenLDAP 服务端的 SSL/TLS 配置、OpenLDAP 客户端的 SSL/TLS 配置。
本文讲述的所有内容和命令适用于 Redhat Enterprise Linux 6.3,其他发行版本的 Linux 可能略有不同。
 

配置 OpenLDAP 使用 SSL/TLS 加密数据通信
SSL/TLS 加密原理简介
SSL/TLS 是基于 PKI 机制的加密方式,包括证书认证、密钥交换、非对称加密、对称加密。SSL/TLS 采用 CA 作为服务端和客户端都信赖的具有权威性的组织,证书的颁发和认证都依赖于 CA,并假定 CA 颁发的证书是可靠的、可信赖的,证书里面的内容是真实的、有效的,并可用于客户机和服务器进行安全的可靠的通信加密。
SSL/TLS 证书用来认证服务器和客户机双方的身份,并用于密钥交换时候的非对称加密。密钥交换完毕之后,就可以用这个密钥做通信数据的对称加密了,具体的加密算法是由客户机和服务器互相协商得来。服务器和客户机由于 SSL/TLS 库的不同以及用户的配置不同,双方支持的算法列表不完全相同,当双方做 SSL/TLS 握手的时候,就需要将自己支持的算法列表及优先顺序告知对方,一旦对方按照优先顺序找到了第一个支持的算法,那么协商完成,否则双方协商失败,SSL/TLS 连接断开。
如何配置 OpenLDAP 客户端和服务端的算法列表将在本文的后续内容中做重点介绍,用户可以通过控制这个列表来提高安全等级,或者降低安全等级来适应更多的算法。
OpenSSL 常用命令
OpenSSL 提供了为数众多的命令来帮助用户使用和查看 SSL/TLS 加密算法、查看证书、生成证书、测试 SSL/TLS 连接等等,以下是一些常用命令的介绍。
·                                 查看 OpenSSL 支持的所有算法
#openssl ciphers
·                                 查看 OpenSSL 是否支持某个算法,如 ECDH-ECDSA-AES128-GCM-SHA256
# openssl ciphers ECDH-ECDSA-AES128-GCM-SHA256
·                                 查看 OpenSSL 是否支持某个协议,如 TLSv1.2
# openssl ciphers TLSv1.2
·                                 查看 x509 证书
# openssl x509 -in cert.pem -text –noout
·                                 检测与 LDAP server 的连接
·                                        # openssl s_client -connect 9.181.137.155:636 -showcerts -state /
  -CAfile /opt/ibm/director/vmi/data/sec/vmitruststore.pem
·                                 生成自签名的 CA 证书
·                                        #openssl req -x509 -newkey rsa:1024 -passout pass:123456 -days 3650 /
·                                        -keyout whhit.pem.key -out whhit.pem.cer -subj /
"/CN=whhit.me/OU=WeRun Club/O=whhit/L=Weihai/S=Shandong/C=CN"
·                                 生成私钥
#openssl genrsa -des3 -out whhit.pem.key -passout pass:123456 1024
·                                 使用指定的私钥生成一个 CSR (Certificate Signing Request)
·                                        #openssl req -new -key whhit.pem.key -passin pass:123456 /
·                                        -out whhit.pem.csr -subj /
 "/CN=whhit.me/OU=WeRun Club/O=whhit/L=Weihai/S=Shandong/C=CN"
·                                 将加密的私钥导出为明文的私钥
#openssl rsa -in whhit.pem.key -passin pass:123456 -out whhit.pem.clear.key
·                                 使用指定的私钥签名生成证书
#openssl x509 -req -days 3650 -in whhit.pem.csr -signkey whhit.pem.clear.key -out whhit.pem.cer
·                                 将私钥和证书转化为 PKCS#12 格式的单个文件
·                                        #openssl pkcs12 -export -in whhit.pem.cer -inkey whhit.pem.key -passin pass:123456 /
-out whhit.p12 -passout pass:123456 -name tomcat
OpenLDAP SSL/TLS 服务器端配置
OpenLDAP 服务端的配置包括软件安装、证书生成、密码组配置等,下面是详细介绍。
·                                 服务器端需要安装的软件
检查 OpenLDAP 和 OpenSSL 的组件是否已经安装,如果没有,需要先安装如下组件:
openldap2-back-meta-2.4.20-35,openldap2-client-2.4.20-35,openldap2-2.4.20-35,/openldap2-back-perl-2.4.20-35,openssl-1.0.1e-13,openssl-32bit-1.0.1e-13,/php5-openssl-5.2.14-0.7.30.38.2,python-openssl-0.7.0-217
·                                 用 PKI 生成 SSL/TLS 服务器证书
创建证书分为 3 个步骤,创建 CA、创建证书请求和用 CA 对证书请求签名生成证书。
1.                                             创建 CA
/etc/pki/tls/misc 是工作目录,/etc/pki/CA 是存放所有 CA 相关文件的目录。如果脚本检测到/etc/pki/CA 下面有文件存在,CA 脚本什么工作也不会做。为确保 CA 脚本能正常工作,需要先把/etc/pki/CA 目录下的文件全删除。
# cd  /etc/pki/tls/misc   (进入工作目录)
# ./CA –newca               (生成 CA)
2.                                             创建 Server 端证书
证书的生成分为两步,生成证书请求文件和用 CA 对证书文件进行签名。
#./CA.pl –newreq      (生成证书请求)
3.                                             CA 对证书请求签名
#./CA.pl –sign
在/etc/pki/tls/misc 路径下创建了 3 个文件,newreq.pem 创建证书请求文件,newcert.pem CA 签发的证书,newkey.pem 证书对应的钥匙。
重命名证书和私钥文件
# mv newcert.pem server.cert# mv newkey.pem server.key# chmod 644 server.cert# chmod 644 server.key
把这两个文件和 CA 的证书文件拷贝到 OpenLDAP 存放证书的目录下,一般在/etc/openldap/cacerts。如果 CA 与 LDAP server 不在同一台机器上需要用 scp 命令将以下文件拷贝到 LDAP server 相应目录。
# mv server.cert /etc/openldap/cacerts# mv serve.key /etc/openldap/cacerts# cp ../../CA/cacert.pem /etc/openldap/cacerts
·                                 配置 LDAP 服务器
1.                                             停掉 LDAP 服务
#service ldap stop
2.                                             编辑/etc/openldap/slapd.conf 在 slapd.conf 文件中加入以下内容
3.                          TLSCACertificateFile /etc/openldap/cacerts/cacert.pem #配置 CA 证书的路径
4.                          TLSCertificateFile /etc/openldap/cacerts/server.cert #配置 server 证书的路径
5.                          TLSCertificateKeyFile /etc/openldap/cacerts/server.key #配置 server 私钥的路径
6.                          TLSCipherSuite ALL:!TLSv1.1:TLSv1.2:!SSLv2:!aNULL:!eNULL:!MD5:!MEDIUM:!LOW
7.                          :!EXPORT:@STRENGTH #支持的协议密码及不支持的协议和密码,!表示不支持
8.                          TLSVerifyClient never # 设置是否验证 client 的身份,其值可以是 never/allow/try/demand,
9.                          #never 不需要验证 client 端的身份,Client 端只需要有 CA 证书就可以了
10.                      #allow Server 会要求 client 提供证书,如果 client 端没有提供证书,会话会正常进行
11.                      #try    Client 端提供了证书,但是 Server 端有可能不能校验这个证书,这个证书会被忽略,会话正常进行
#demand Server 端需要认证 client 端的身份,Client 端需要有自己的证书和私钥
12.                                         启动 LDAP 服务
#service ldap start
OpenLDAP SSL/TLS 客户端配置
OpenLDAP 客户端的配置包括证书创建、服务器连接配置、证书配置、密码组配置等,以下是详细的步骤。
·                                 Client 端的证书文件制作
Client 端的证书制作与 Server 端类似,先创建请求文件,然后用 CA 对请求文件进行签名。签名时一般采用 Client 的主机名(hostname)做为 Common name。证书的名字实际上就是证书中的 Common Name 字段。这个字段应该从证书中进行检索,并根据主机名进行验证,如果二者不能匹配,证书的安全性就会受到质疑。有些公司在不同的主机上使用相同的证书,即使证书中的 Common Name 只是用于一个主机的,这是为了确保证书来自相同的公司,能够进行更深入的检查。Common Name 具体取什么值取决于项目的安全性需要。
#./CA.pl –newreq      (生成证书请求)#./CA.pl –sign            # mv newcert.pem client.cert# mv newkey.pem client.key# chmod 644 client.cert# chmod 644 client.key
把这两个文件和 CA 的证书文件用 scp 命令拷贝到 Client 端 OpenLDAP 存放证书的目录下,如/etc/openldap/cacerts。
·                                 编辑/etc/openldap/ldap.conf
·                                        URI ldaps://vm189.cn.ibm.com:636     # 一定要和 server 的证书里输入的 full qualified name 一样
·                                        TLS_CACERT /etc/openldap/cacerts/cacert.pem     # CA 的证书
·                                        TLS_REQCERT never     # client 是否要求认证 server 端
·                                        TLS_CIPHER_SUITE ALL:!TLSv1.1:!TLSv1:!SSLv3:!SSLv2:!aNULL:!eNULL:!MD5:!MEDIUM:!LOW:
!EXPORT:@STRENGTH
·                                 重启 LDAP 服务
#service ldap restart
·                                 检验与 LDAP server 之间是否能连通
·                                        #openssl s_client –connect vm189.cn.ibm.com:636 –CAfile /etc/openldap/cacerts/cacert
.pem-showcerts –state
验证 OpenLDAP 服务器端和客户端的 SSL/TLS 协议协商方式
为了验证 OpenLDAP 的服务端和客户端的 SSL/TLS 连接协议的正确性,我们可以按照如下的步骤来检验。
·                                 配置服务器端并重启服务器端的 LDAP Service
按照前面叙述的步骤配置好 LDAP 服务器。
重启 LDAP Service
#service ldap restart
导入 LDAP user 信息
将 ldif 文件上传到 ldap 服务器,如 tmp 目录。如导入的文件名字为 ldapou.ldif, 其文件中关于 oladmin 账户的内容如下:
dn: uid=oladmin,ou=People,c=cn,dc=ibm,dc=comuid: oladmincn: oladminsn: oladminmail: oladmin@cn.ibm.comobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonobjectClass: topobjectClass: posixAccountuserPassword: passw0rduidNumber: 501gidNumber: 501homeDirectory: /home/oladmin

 
运行如下命令增加用户和组到 LDAP 服务器目录
# ldapadd -x -D "cn=root,c=cn,dc=ibm,dc=com" -w passw0rd -f /tmp/ldapou.ldif
重启 LDAP Service
#service ldap restart
·                                 配置客户端并重启客户端的 LDAP Service
在客户端的/etc/openldap/目录中配置 ldap.conf 文件,内容如下:
TLS_REQCERT neverTLS_CIPHER_SUITE ALL:!TLSv1.1:!TLSv1:!SSLv3:!SSLv2:!aNULL:!eNULL:!MD5:!MEDIUM:!LOW:!EXPORT:@STRENGTHURI ldaps://vm189.cn.ibm.com:636     #ldap server 地址base c=cn,dc=ibm,dc=com        binddn cn=root,c=cn,dc=ibm,dc=combindpw crypt{77f132b2f9d77723}searchfilter (&(uid=%v)(objectclass=inetOrgPerson))pam_login_attribute uidldap_version 3timelimit 30bind_timelimit 30bindpw_key /etc/openldap/fsm.data     #密码TLS_CACERT /opt/ibm/director/vmi/data/sec/vmitruststore.pem  #CA 证书pam_lookup_policy yes

 
·                                 在客户端验证服务器端的 LDAP user 信息
运行 ldapsearch 命令,查看服务器端的 user
 # ldapsearch -x -ZZ -h 9.181.137.189 636 (ZZ 选项用来启动 TLS 连接)
命令运行后的结果
# extended LDIF# LDAPv3# base <c=cn,dc=ibm,dc=com> (default) with scope subtree# filter: (objectclass=*)# requesting: 636# cn, ibm.comdn: c=cn,dc=ibm,dc=com# People, cn, ibm.comdn: ou=People,c=cn,dc=ibm,dc=com# Group, cn, ibm.comdn: ou=Group,c=cn,dc=ibm,dc=com# oladmin, People, cn, ibm.comdn: uid=oladmin,ou=People,c=cn,dc=ibm,dc=com
……(此处省略了其他账户的信息)
从返回的结果中可以找到从服务器端导入的 user,如 oladmin 等账户信息,证明 TLS LDAP 连接时建立好了。
 

总结
通过本文的讲述和实验,我们可以更深入的了解 OpenLDAP 和 OpenSSL 是如何协同工作的,并如何配置 OpenLDAP 的服务端和客户端以满足用户对数据通信安全的要求,这些都是当前网络安全及加密安全的问题日益严重的情况下,用户的迫切需求。
 
>更多相关文章
24小时热门资讯
24小时回复排行
资讯 | QQ | 安全 | 编程 | 数据库 | 系统 | 网络 | 考试 | 站长 | 下载 | 关于东盟 | 安全雇佣 | 搞笑视频大全 | 微信学院 |
关于我们 | 联系我们 | 广告服务 | 人才招聘 | 服务条款 | 免责申明 | 帮助中心 | 作品发布 | 网站地图 | 技术培训
Copyright © 2007 - 2018 Vm888.Com. All Rights Reserved
东方联盟 版权所有