配置LDAP启动TLS

阅读本文之前,建议初学的小伙伴先看一下上一篇:完整的 LDAP + phpLDAPadmin安装部署流程 (ubuntu18.04)

以下正文:

接下来的操作承接上文,还是在同一台机器上。

操作系统:Ubuntu18.04

安装gnutls-binssl-cert软件包

root@cky:~# apt install gnutls-bin ssl-cert -y

为证书颁发机构创建私钥:

root@cky:~# certtool --generate-privkey --bits 4096 --outfile /etc/ssl/private/mycakey.pem

创建模板/文件/etc/ssl/ca.info以定义CA:

root@cky:~# cat /etc/ssl/ca.info
cn = Xcdata Company
ca
cert_signing_key
expiration_days = 3650

创建自签名的CA证书:

root@cky:~# certtool --generate-self-signed \
--load-privkey /etc/ssl/private/mycakey.pem \
--template /etc/ssl/ca.info \
--outfile /usr/local/share/ca-certificates/mycacert.crt

运行update-ca-certificates以将新的CA证书添加到受信任的CA列表中。请注意添加的一个CA:

root@cky:~# update-ca-certificates
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

这还会在中创建一个/etc/ssl/certs/mycacert.pem指向实际文件的符号链接/usr/local/share/ca-certificates

为服务器创建一个私钥:

root@cky_dev:~# certtool --generate-privkey \
--bits 2048 \
--outfile /etc/ldap/company_ldap_slapd_key.pem ** Note: You may use '--sec-param Medium' instead of '--bits 2048'
Generating a 2048 bit RSA private key...

创建/etc/ssl/company_ldap.info包含以下内容的信息文件:

organization = Company
cn = company.com
tls_www_server
encryption_key
signing_key
expiration_days = 365

以上证书有效期为1年,仅对company.com主机名有效。

创建服务器的证书:

root@cky:~# certtool --generate-certificate \
--load-privkey /etc/ldap/company_ldap_slapd_key.pem \
--load-ca-certificate /etc/ssl/certs/mycacert.pem \
--load-ca-privkey /etc/ssl/private/mycakey.pem \
--template /etc/ssl/company_ldap.info \
--outfile /etc/ldap/company_ldap_slapd_cert.pem

调整权限和所有权:

root@cky:~# chgrp openldap /etc/ldap/company_ldap_slapd_key.pem
root@cky:~# chmod 0640 /etc/ldap/company_ldap_slapd_key.pem

现在服务器准备接受新的TLS配置。

创建certinfo.ldif文件

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/mycacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/company_ldap_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/company_ldap_slapd_key.pem

使用ldapmodify命令通过slapd-config数据库告诉slapd我们的TLS工作:

root@cky:~/ldap# ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

最后检查个文件

root@cky:~/ldap# grep -e '^SLAPD_SERVICES' /etc/default/slapd
SLAPD_SERVICES="ldap:/// ldapi:///"

因为我们不需要使用 ldaps://,而推荐使用StartTLS。后者指的是已由TLS / SSL保护的现有LDAP会话(在TCP端口389上监听),而LDAPS像HTTPS一样,是一种独特的从头开始加密的协议,它在TCP端口636上运行。

OpenLDAP副本的证书

要为OpenLDAP副本(消费者)生成证书对,创建一个保存目录(将用于最终传输)

root@cky:~# mkdir /mnt/ldap02-ssl
root@cky:~# cd /mnt/ldap02-ssl/
root@cky:/mnt/ldap02-ssl# pwd
/mnt/ldap02-ssl root@cky_dev:/mnt/ldap02-ssl# certtool --generate-privkey \
--bits 2048 \
--outfile company_ldap02_slapd_key.pem ** Note: You may use '--sec-param Medium' instead of '--bits 2048'
Generating a 2048 bit RSA private key...

为消费者服务器创建一个信息文件ldap02.info

organization = Company
cn = company02.com
tls_www_server
encryption_key
signing_key
expiration_days = 365

创建消费者证书:

root@cky:/mnt/ldap02-ssl# certtool --generate-certificate \
--load-privkey company_ldap02_slapd_key.pem \
--load-ca-certificate /etc/ssl/certs/mycacert.pem \
--load-ca-privkey /etc/ssl/private/mycakey.pem \
--template ldap02.info \
--outfile company_ldap02_slapd_cert.pem

获取CA证书的副本

root@cky:/mnt/ldap02-ssl# cp /etc/ssl/certs/mycacert.pem .

现在将ldap02-ssl目录转移到使用者。(如果是多节点可以scp,现在是单节点测试,就直接本地搞了)

root@cky:/mnt/ldap02-ssl# cp company_ldap02_slapd_cert.pem company_ldap02_slapd_key.pem /etc/ldap/
root@cky:/mnt/ldap02-ssl# chgrp openldap /etc/ldap/company_ldap02_slapd_key.pem
root@cky:/mnt/ldap02-ssl# chmod 0640 /etc/ldap/company_ldap02_slapd_key.pem
root@cky:/mnt/ldap02-ssl# cp mycacert.pem /usr/local/share/ca-certificates/mycacert.crt
root@cky:/mnt/ldap02-ssl# update-ca-certificates

创建certinfo.ldif具有以下内容的文件

dn: cn=config
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/mycacert.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/company_ldap02_slapd_cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/company_ldap02_slapd_key.pem

配置slapd-config数据库:

root@cky:/mnt/ldap02-ssl# ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldif

报错

root@cky:/mnt/ldap02-ssl# ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
ldap_modify: Inappropriate matching (18)
additional info: modify/add: olcTLSCACertificateFile: no equality matching rule

一番百度google之后,更改certinfo.ldif,将add改成了replace

dn: cn=config
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/mycacert.pem
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/company_ldap02_slapd_cert.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/company_ldap02_slapd_key.pem

再跑一次(此处diss一下ubuntu的官方文档

root@cky:/mnt/ldap02-ssl# ldapmodify -Y EXTERNAL -H ldapi:/// -f certinfo.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

加个解析

# file : /etc/hosts
xxx.xxx.xxx.xxx company02.com

测试

root@cky:/mnt/ldap02-ssl# ldapwhoami -x -ZZ -h company02.com
anonymous

LDAP启动TLS 完整操作流程的更多相关文章

  1. UIPickerView/UIDatePicker/程序启动的完整过程

    一.UIPickerView 1.UIPickerView的常见属性 数据源(用来告诉UIPickerView有多少列多少行) @property(nonatomic,assign) id<UI ...

  2. LDAP启动cacao提示Invalid file permission

    问题处理步骤: 1.LDAP实例停止 2.DSCC控制台启动,提示cacao已停止…… 3.启动caocaoroot@rusky bin]# ./cacaoadm startInvalid file ...

  3. docker odoo启动比较完整的命令

    docker run --name odoo12 -p : -p : -v /root/workspace/odoo-addons/:/mnt/extra-addons -v /root/worksp ...

  4. 使用UltraISO(软碟通)制作U盘制作启动盘完整教程

    背景:服务器需要安装系统,但是没有启动盘只有镜像. 前提:U盘和安装镜像准备好 步骤一:首先我们先安装软碟通,完成安装后打开软碟通,文件->打开,打开我们需要制作的iso镜像.如下图(也可下本地 ...

  5. 曹工说Redis源码(3)-- redis server 启动过程完整解析(中)

    文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于 ...

  6. Jetty 嵌入式启动官方完整教程

    网上太多了,不如直接看官方的这个全面. http://wiki.eclipse.org/Jetty/Tutorial/Embedding_Jetty 入门地址: http://wiki.eclipse ...

  7. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

  8. 开启 TLS 1.3 加密协议,极速 HTTPS 体验

    随着互联网的发展,用户对网络速度的要求也越来越高,尤其是目前在大力发展 HTTPS 的情况下,TLS 加密协议变得至关重要.又拍云在 HTTPS 的普及和性能优化上,始终做着自己的努力和贡献.2018 ...

  9. LDAP与实现

    LDAP是什么? LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP.它是基于X.500标准的,但是简单多了并且可以 ...

随机推荐

  1. 枚举--让盗版美国总统wcc给你整明白哈哈

    1.为什么要有枚举 Java中的枚举其实是一种语法糖,在 JDK 1.5之后出现,用来表示固定且有限个的对象.比如一个季节类有春.夏.秋.冬四个对象:一个星期有星期一到星期日七个对象.这些明显都是固定 ...

  2. ElasticSearch 安装与运行

    公号:码农充电站pro 主页:https://codeshellme.github.io 本节来介绍 ES 的安装. 1,下载 ES ES 是基于 Java 语言开发的,因此,要安装 ES,首先需要有 ...

  3. A - A Supermarket (贪心, 并查集)

    超市里有n个产品要卖,每个产品都有一个截至时间dx(从开始卖时算起),只有在这个截至时间之前才能卖出并且获得率润dy. 有多个产品,所有可以有不同的卖出顺序,每卖一个产品要占用1个单位的时间,问最多能 ...

  4. LA3902 Network (树上dfs)

    题目链接:点击打开链接 题意:n台机器连成一个树状网络,其中叶节点是客户端,其他节点是服务器,目前有一台服务器s正在提供服务.让你在其他服务器上也安排同样的服务,使得每台客户端到最近服务器的距离不超过 ...

  5. Codeforces Round #645 (Div. 2) D、The Best Vacation

    题目链接:The Best Vacation 题意: 给你n个月份,每一个月份有di天.你可以呆在那里x天(x天要连续),如果你在某月的第y天呆在这.那么你的拥抱值就加y 1<=n<=2e ...

  6. Codeforces Global Round 11 C. The Hard Work of Paparazzi (DP)

    题意:有\(r\)X\(r\)的网格图,有\(n\)位名人,会在\(t_i\)时出现在\((x_i,y_i)\),如果过了\(t_i\)名人就会消失,从某一点走到另外一点需要花费的时间是它们之间的曼哈 ...

  7. 13. 从0学ARM-Cortex-A9 RTC裸机程序编写

    一.RTC RTC(Real-Time Clock) 实时时钟. RTC是集成电路,通常称为时钟芯片.在一个嵌入式系统中,通常采用RTC来提供可靠的系统时间,包括时分秒和年月日等,而且要求在系统处于关 ...

  8. PowerShell多任务

    代码 foreach ($server in $servers) { $running = @(Get-Job | Where-Object { $_.State -eq 'Running' }) i ...

  9. .Net下的PDF打印

    简单研究了一下.Net下的PDF打印,一路发现了很多小坑. 第三方组件 这里使用的解析PDF的组件是mupdf,特点和C#调用在 这里 有介绍. 实现的功能 支持页面大小.边距.打印机选择.打印机dp ...

  10. [Angular] 删除旧版本,升级安装最新版本

    目录 删除旧版本 清除未卸载干净的angular-cli缓存 对于Linux 对于Windows 安装最新版本 查看安装版本 创建新项目 删除旧版本 npm uninstall -g angular- ...