docker openldap的安装
LDAPS
操作系统时Amazon Linux
官方说明里关于LDAPS的配置介绍的比较简略,现将测试结果记录如下:
- 启动容器的命令里可以增加env: LDAP_TLS_VERIFY_CLIENT,忽略Client证书验证:
docker run --name ldap-service --hostname ldap.service.my --detach -p 389:389 -p 636:636 --env LDAP_TLS_VERIFY_CLIENT=try osixia/openldap:1.4.0LDAP_TLS_VERIFY_CLIENT可以设置为never或try, 默认是demand
- 测试LDAPS连接可以使用
ldapwhoami -x -H ldaps://ldap.service.my -v连接证书验证失败时会报错:
ldap_initialize( ldaps://ldap.service.my:636/??base ) ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)解决方法参考3, 4
可以查看openldap容器的日志获取具体的错误:
TLS: can't accept: No certificate was found.. or TLS: can't accept: A TLS fatal alert has been received.. - 先要获取OpenLDAP server的CA根证书:
openssl s_client -connect ldap.service.my:636 -showcerts要取输出里第二个证书的内容:
1 s:/C=US/O=A1A Car Wash/OU=Information Technology Dep./L=Albuquerque/ST=New Mexico/CN=docker-light-baseimage i:/C=US/O=A1A Car Wash/OU=Information Technology Dep./L=Albuquerque/ST=New Mexico/CN=docker-light-baseimage -----BEGIN CERTIFICATE----- <此处省略> -----END CERTIFICATE-----将BEGIN和END之间(含)的内容复制到新文件ca.pem
-
有两种方式设置客户端验证使用的证书
1) 使用环境变量
LDAPTLS_REQCERT=demand LDAPTLS_CACERT=ca.pem ldapwhoami -x -H ldaps://ldap.service.my -v如果还是连接失败,就把LDAPTLS_REQCERT设置为never
2) 修改配置文件 /etc/openldap/ldap.conf 增加下面两个配置:
TLS_CACERT /home/ec2-user/ca.pem TLS_REQCERT try -
有个SSL的小知识点是我想到的,但是没去考证: 客户端只需要配置CA根证书就可以验证服务端证书了,而不需要服务端的公有证书。
- 使用docker openldap自己生成的SSL证书有风险,只可以在内网中使用。