Linux上通过SSL/TLS和start tls连接到LDAP服务器(附C++代码实现认证流程)
一,大致流程。
1.首先在Linux上搭建一个LDAP服务器 2.在LDAP服务器上安装CA证书,服务器证书,因为SSL/TLS,start tls都属于机密通信,需要客户端和服务器都存在一个相同的证书认证双方的身份。3.安装phpldapadmin工具,为我们提供一个可视化操作的LDAP服务器界面,让我们能够方便去管理用户,组织。4.通过TLS和start tls和连接到LDAP服务器。
2.提交了解,新手必看。首先你在执行下述安装LDAP搭建之前,创建一个新的ubuntu的作为你的服务器的载体。其次,你新建的这个ubuntu的IP地址就是你LDAP服务器的IP地址,默认服务器管理员账户名为admin。鬼知道我之前找IP地址和管理员账户在配置文件里面扒拉了多少时间。
二.搭建LDAP服务器
三.搭配CA证书,服务器证书
二,三两个步骤我就不写了,这两个文章在这位大佬里面的博客写得非常详细,直接粘贴复制这位大佬的命令就行了。然后我会解决大佬文章中出现的一个错误,应该是版本更迭原因。
大佬的文章做到"配置OpenLDAP以使用证书和密钥"这一步时,他在保存addcerts.ldif后直接执行了写入配置文件这条命令。
经过我多次测试,如果在执行这条命令前不执行重启Openldap服务:sudo service slapd force-reload这条命令的话,会报出ldap_modify: Other (e.g., implementation specific) error (80)这样的错误,当你保存addcerts.ldif这个文件之后,正确的执行命令应当是。
sudo service slapd force-reload
sudo ldapmodify -H ldapi:// -Y EXTERNAL -f addcerts.ldif
sudo service slapd force-reload
修改配置文件,开启SSL\TLS和Start TLS认证
sudo vim /etc/default/slapd
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///" //手动开始服务器支持TLS和SSL,前提是你的证书和私钥全部安装完毕;ldapi表示开启Start TLS认证,ldaps表示开启SSL\TLS认证
sudo vim /etc/ldap/ldap.conf
在文件中添加下面两行数据
TLS_REQCERT try //表示强制开启client验证服务器的证书,如果改为allow,可以通过IP连接到服务器
TLS_CACERT /etc/ldap/ca_certs.pem //指定证书的位置
四,安装phpldapadmin工具(不需要可视化界面的可以直接跳到第五步,不影响连接到LDAP服务器)
搭载phpldapadmin,phpldapdamin,这是一个可视化的LDAP服务器操作页面,能够更好的管理LDAP服务器。
1.安装phpldapadmin工具包
sudo apt-get install -y phpldapadmin
2.安装成功之后检查对应的配置文件,红色为修改部分
sudo vim /etc/phpldapadmin/config.phphp //打开配置文件
$servers->setValue('server'. 'host', '127.0.0.1') //第三个参数修改为本地环回地址,一般都是这个
$servers->setValue('server'. 'base', array('dc=example,dc=com')) //填写域名,我的是example.com
$servers->setValue('login', 'bind_id', 'cn=ldap,dc=example,dc=com') //管理员名+域名 上诉步骤均没有指定管理员名,服务器的默认管理员名均为admin
保存退出
3. 配置文件修改之后配置防火漆:防火墙放行Apache2
Ubuntu命令行执行以下3条命令
ufw allow "Apache"
ufw allow "Apache Full"
ufw allow "Apache Secure"
4 重启服务器
sudo /etc/init.d/apache2 restart
5.将http:///phpldapadmin 替换为LDAP服务器的IP地址,将这个放到任意一个游览器中运行,点击左侧登录会出现以下画面进行登录

6.3.6 登录成功之后进入以下画面

五,连接到AD服务器
1.验证是否配置成功Strat TLS认证
这里的ldap://ldap.example.com 必须使用域名,不可以使用IP地址,因为client验证服务器的证书使用的是域名而不是IP地址,如果形式变为ldap://192.168.45.xxx 的形式,就不能连接到服务器。除非你将TLS_REQCERT try改为TLS_REQCERT allow(表示不强制开启client验证服务器的证书)。
ldapwhoami -H ldap://ldap.example.com -x -ZZ //-ZZ表示强制使用Strat TLS
如果成功,那么你将会看见
anonymous
如果失败,请检查以下
1. /etc/ldap/ldap.conf中指定的证书路径是否正确TLS_CACERT /etc/ldap/ca_certs.pem
2.证书内容是否在复制过程中,多了空格,换行,建议直接复制文件
3.服务器的/etc/default/slapd文件中的SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"字段是否有ldapi:///内容,如果是该错误,修改完配置文件之后,重启服务sudo service slapd force-reload 。
4.如果以上3步全部正确,尝试在client的/etc/hosts加上反向域名解析:
sudo vim /etc/hosts
#添加方向域名解析
127.0.1.1 ldap.example.com ldap
127.0.0.1 localhost
192.168.45.147 ldap.example.com
2.远程客户端通过SSL\TLS连接到服务器
ldapwhoami -H ldaps://ldap.example.com -x
如果成功
anonymous
失败的话请查看Strat TLS中提到的错误检查,如果Strat TLS已经成功了,而你的SSL\TLS失败了,就只有/etc/default/slapd文件中的SLAPD_SERVICES字段没有添加ldaps:///
六,通过C++代码实现Strat TLS和SSL\TLS认证流程
......
相关文章:
Linux上通过SSL/TLS和start tls连接到LDAP服务器(附C++代码实现认证流程)
一,大致流程。 1.首先在Linux上搭建一个LDAP服务器 2.在LDAP服务器上安装CA证书,服务器证书,因为SSL/TLS,start tls都属于机密通信,需要客户端和服务器都存在一个相同的证书认证双方的身份。3.安装phpldapadmin工具&am…...
HarmonyOS ArkTS List组件和Grid组件的使用(五)
简介 ArkUI提供了List组件和Grid组件,开发者使用List和Grid组件能够很轻松的完成一些列表页面。常见的列表有线性列表(List列表)和网格布局(Grid列表): List组件的使用 List是很常用的滚动类容器组件&…...
考研思想政治理论大纲
一:马克思主义基本原理概论 (一)马克思主义是关于无产阶级和人类解放的科学 1、马克思主义的创立和发展 马克思主义的含义。马克思主义产生的经济社会根源、实践基础和思想渊源、马克思主义的创立、马克思主义在实践中的发展 2、马克思主义的鲜明特征 马克思主义科学性和革命…...
日期格式转化成星期几部署到linux显示英文
异常收集 原因:解决办法仰天大笑出门去,我辈岂是蓬蒿人 传入一个时间获取这个时间对应的是星期几,在开发环境(window系统)中显示为星期几,部署到服务器(linux系统)中会显示英文的时间…...
一个关于proto 文件的经验分享 :gRPC 跨语言双端通信显示错误码:12 UNIMPLEMENTED (附赠gRPC错误码表)
错误现象描述: 在使用c的客户端向golang的服务端发送远程调用时,显示: /home/zry/gRPC/grpc-v1.45.2/examples/cpp/DeviceData/greeter_client.cc83 12: unknown service DeviceData.DeviceDataService Greeter 接收到: RPC 失败这里的unkn…...
腾讯极光盒子A4021增强版_线刷官方
1、用USB_Burning_Tool线刷提供的线刷包,所需资料地址在最后 1)打开USB_Burning_Tool,选择资料里的A4021_line_flash_root.img(文件夹最好没有中文字符和空格),然后点击【开始】。 2)盒子准备好双USB线和电源。在1秒内先插入电源,再插入usb口。等这个软件识别到盒子,…...
机器学习第11天:降维
文章目录 机器学习专栏 主要思想 主流方法 投影 二维投射到一维 三维投射到二维 流形学习 PCA主成分分析 介绍 代码 内核PCA 具体代码 LLE 结语 机器学习专栏 机器学习_Nowl的博客-CSDN博客 主要思想 介绍:当一个任务有很多特征时,我们…...
异步爬取+多线程+redis构建一个运转丝滑且免费http-ip代理池 (三)
内容提要: 如果说,爬取网页数据的时候,我们使用了异步,那么将数据放入redis里面,其实也需要进行异步;当然,如果使用多线程或者redis线程池技术也是可以的,但那会造成冗余; 因此,在测试完多线程redis搭配异步爬虫的时候,我发现效率直接在redis这里被无限拉低下来! 因此: 最终的r…...
VSCode新建Vue项目
前言 Vue.js 是一款流行的 JavaScript 前端框架,它可以帮助开发者轻松构建高性能、可扩展的 Web 应用程序。而 VSCode 则是一款功能强大的开源代码编辑器,它提供了许多有用的工具和插件,可以大幅提高开发效率。 在本文中,我们将…...
前端学习--React(1)
一、React简介 React由Meta公司研发,是一个用于 构建Web和原生交互界面的库 优势:组件化开发、不错的性能、丰富生态(所有框架中最好)、跨平台(web、ios、安卓) 开发环境搭建 打开相应文件夹 新建终端并…...
HarmonyOS从基础到实战-高性能华为在线答题元服务
最近看到美团、新浪、去哪儿多家互联网企业启动鸿蒙原生应用开发,这个HarmonyOS NEXT越来越引人关注。奈何当前不面向个人开发者开放,但是我们可以尝试下鸿蒙新的应用形态——元服务的开发。 元服务是基于HarmonyOS提供的一种面向未来的服务提供方式&…...
OpenCV快速入门:窗口交互
文章目录 前言一、鼠标操作1.1 鼠标操作简介1.2 鼠标事件类型(event类型)1.3 鼠标事件标志(flags)1.4 代码示例1.4.1 获取鼠标坐标位置1.4.2 监听鼠标滚轮事件1.4.3 在图像中显示鼠标坐标 二、键盘操作2.1 代码示例2.2 waitKey的等…...
数据智能引擎:企业模糊搜索API精准获取企业列表信息
引言 随着信息时代的迅速发展,数据变得愈加庞大和复杂。在这个大数据的时代,企业面临着海量信息的管理和利用挑战。为了更有效地获取并利用数据,企业信息模糊搜索API成为了企业数据智能引擎的一部分,为企业提供了精准的企业列表检…...
汇编-间接寻址(处理数组)
直接寻址很少用于数组处理,因为用常数偏移量来寻址多个数组元素时,直接寻址并不实用。取而代之的是使用寄存器作为指针(称为间接寻址(indirect addressing) ) 并控制该寄存器的值。如果一个操作数使用的是间接寻址, 就称之为间接操作数(indie…...
lombok 的使用讲解
目录 前言1. 基本知识2. 代码应用 前言 在项目中经常会看到lombok的应用,此文作为科普帖,详细介绍lombok 1. 基本知识 简介: Project Lombok是一款用于Java开发的工具,旨在通过自动生成样板代码来简化Java代码的编写。 它通过注…...
echarts的使用
1. 普通版 其实主要就是option1,option1就是画的图 echats不能响应刷新,要想实时刷新监听刷新的值重新调用一下方法即可 html <div class"echart" style"width: 100%;height: calc(100% - 130px)" ref"main1">&l…...
js进阶笔记之构造函数
目录 一、构造函数 1、 创建对象 2、new执行过程 3、带参数构造函数 4、实例成员与静态成员 二、内置构造函数 1、Object静态方法 2、包装类型 3、Array 1、map方法 2、find方法 3、findIndex( ) 4、some与every 5、reverse() 6、reduce方法 7、forEach() …...
Codesys数据类型(2.7):扩展数据类型之 别名 详解
Codesys代码代写,程序开发,软件定制,bug修改,问题咨询: T宝搜索店铺【林磊教育】 定义及声明 别名的目的是声明出 基本数据类型,结构体,枚举、共用体(UNION)、功能块、指针备用名字,…...
白盒子测试总结
白盒子测试,也称为结构测试、透明盒测试、逻辑驱动测试或基于代码的测试,是一种测试用例的设计方法。白盒测试需要全面了解被测试程序的内部逻辑结构,并对所有逻辑路径进行测试。其基本方法包括: 语句覆盖:设计若干个…...
字符数组基础知识
字符数组是存放字符数据的数组,其中每一个元素存放的值都是单个字符。 字符数组:由字符类型的元素组成,其定义与初始化方式,以及对数组元素的引用都与整数数组类似,代码示例 char c[5]{h,e,l,l,,o}; 注意࿱…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...

