ToB项目身份认证AD集成(二):一分钟搞定window server 2003部署AD域服务并支持ssl加密(多图保姆教程+证书脚本)

news/2024/9/24 12:31:01/

在ToB的应用开发中,往往需要集成AD域控实现身份认证,同时也算是近期工作的总结,之前已介绍了基础的AD、Ldap,本文主要介绍如何大家一个本地的测试环境。
相关系列:

  1. ToB项目身份认证AD集成(一):AD和ldap简介

  2.  ToB项目身份认证AD集成(二):window server 2003部署AD域服务

为避免信息泄露,图中很多位置会出现涂鸦遮盖,但都不影响理解。 

 

注意一分钟搞定指的是看完本文,你下载了脚本之后哈~

1 准备工作

1.1 window server主机/虚拟机

        一台windows server服务器或者虚拟机(下文以2003为例子),且包含了域服务。

        推荐找一下就绪的镜像或者快照,

 1.2 安装AD域服务

确保服务器管理出现AD DS选项,不然就需要在配置中添加功能并安装Active Directory域服务(见下图)

1.3 测试AD的ldap接口

选中AD域的一个服务器(本机),右键打开ldp客户端

首次打开会自动连接,可以看到授权成功(此时默认用的是非加密通道),Authenticated as xxx

 

到达这一步,恭喜你已经部署好AD域服务了,但这还不够,敏感操作是需要通过加密端口访问的,如果只是查询信息,到这里就可以了。

2 LDAPS

2.1 为什么需要ldaps

对于简单的操作,我们使用ldap就可以操作,例如成员、组织目录查询这种。

但是如果你尝试修改密码等操作,会报错‘Unwilling To Perform‘’’如下:

LDAPError [UnwillingToPerformError]: Unwilling To Performat messageCallback (D:\projects\cloudpcadmin\modules\ldap-ad\node_modules\ldapjs\lib\client\client.js:1267:45)at Parser.onMessage (D:\projects\cloudpcadmin\modules\ldap-ad\node_modules\ldapjs\lib\client\client.js:925:14)at Parser.emit (node:events:519:28)at Parser.emit (node:domain:488:12)at Parser.write (D:\projects\cloudpcadmin\modules\ldap-ad\node_modules\ldapjs\lib\messages\parser.js:135:8)at Socket.onData (D:\projects\cloudpcadmin\modules\ldap-ad\node_modules\ldapjs\lib\client\client.js:875:22)at Socket.emit (node:events:519:28)at Socket.emit (node:domain:488:12)at addChunk (node:internal/streams/readable:559:12)at readableAddChunkPushByteMode (node:internal/streams/readable:510:3) {lde_message: 'Unwilling To Perform',lde_dn: null
}

这是出于安全考虑的,文传输密码生成的数据是不安全的,被中间窃取后别人就可以直接拿来用

所以,想要实现密码修改等功能,就必须支持ldaps

2.3 测试是否已支持ldaps

同样使用之前的ldp.exe, 选择连接-断开连接-连接,端口号改为636(ldaps),选中ssl

点击确定,可看到无法连接提示,出现了报错。

说明设备并未支持支持ssl连接,

如果成功,说明这个镜像已经支持,就可以跳过后续操作啦

3 一键生成证书并部署

3.1 证书生成脚本

运行下面的脚本,制作一个FQDN的证书,用于ssl连接同时配置好相关的参数并重启,已经绑定了附件资源,欢迎下载(编辑时中文注释部分会出现乱码,这个脚本是claude多次修改和我调整部分内容后经过反复测试的)

# addcert.ps1
# 创建新证书并将其设置为 NTDS 参数的 PowerShell 脚本
$serverFQDN = "$env:COMPUTERNAME.$env:USERDNSDOMAIN"
$cert = New-SelfSignedCertificate -DnsName $serverFQDN -CertStoreLocation "Cert:\LocalMachine\My" -KeyUsage KeyEncipherment,DigitalSignature -KeySpec KeyExchange -KeyLength 2048 -KeyExportPolicy Exportable -NotAfter (Get-Date).AddYears(5)Write-Host "Created new certificate:"
$cert | Format-List Subject, Thumbprint, NotAfter# 设置 NTDS 参数
$ntdsParams = "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters"
Set-ItemProperty -Path $ntdsParams -Name "Certificate" -Value $cert.ThumbprintWrite-Host "Certificate thumbprint set in NTDS parameters: $($cert.Thumbprint)"# 重启 NTDS 服务
Restart-Service -Name NTDS -Force
Write-Host "NTDS service restarted"

补充说明下,这里面有个知识点 FQDN,注意如果自己签名,一定要留意下这部分,就是一个一个主机的最终标识域名,之前我也研究了挺久才搞懂的,类似java包名或者网站hostname一样的东西,保证这个主机在某个网络内标识唯一 

 3.2 等待NTDS重启

这里需要等一会儿,可能一分钟

AD DS下面查看服务器服务状态,确保NTDS正常启动

3.3 部署证书(更改作用域)

因为是本机生成的自签名证书,想要全局服务生效,需要将证书复制到受信任区域,应该是为了防止其它程序自动生成证书(或许有更好的办法)

具体操作为:

3.3.1 按下win+R打开运行
3.3.2 输入 - certlm.msc 打开证书管理

打开个人证书,可看到生成的证书,并具备有身份验证目的

 

 3.3.3 复制生成的证书

3.3.4 在受信任的根证书颁发机构下的证书目录粘贴 

确保已经粘贴成功

 4 测试ssl连接

4.1 参考2.3 使用ldp.exe

修改端口和勾选ssl后点击确认,可看到不再失败,而是显示了支持信息 

 

向上滚动可看到连接成功,获取到了目录数据(Established connection to )

4.2 它机ssl测试

在别的电脑测试下证书是否生效,可参考SSL证书安装、配置和问题定位指南_- ssl certificate cannot be trusted-CSDN博客

使用openssl s_client指令(注意先安装openssl,没有的就下载安装下)

5. 总结

看完你会发现操作很简单,只有两步:运行脚本生成证书;手动复制下证书。可能一分钟就搞定了。

但是到昨天下午为止,捣鼓这个环境,也是试了不少东西,花费了差不多三四天的时间,虽然不全在做这个,但大部分时间是。归根结底一个是网络上的指导都很零散,也似乎缺少ad+ldaps的内容。另一个就是自己基础不扎实,如何测试证书生效都是先学的,之前也就部署过nginx证书等,这次不得不深入研究下了握手过程等。

突然才意识到,我们的桌面是有屏幕水印的,可怕,幸亏之前没怎么截大图,但这次的操作比较复杂,不截图可能不好说明,幸亏发现的早,有一部分图还重新返工了。 

昨日工作总结结束,后续我将介绍nodejs如何对接AD域,敬请期待~

2cy

YU.H


http://www.ppmy.cn/news/1529816.html

相关文章

sqlite数据库导入数据后docsize, segdir, segments, stat为空

在 SQLite 中,如果你使用 FTS4 模块,并且在导入数据后发现 v_word_docsize、v_word_segdir、v_word_segments 和 v_word_stat 表为空,这通常表明全文索引未正确构建或触发。出现这种情况的原因可能包括: 可能原因 数据未触发索引…

邮件发送高级功能详解:HTML格式、附件添加与SSL/TLS加密连接

目录 一、邮件HTML格式设置 1.1 HTML邮件的优势 1.2 HTML邮件的编写 二、添加附件 2.1 附件的重要性 2.2 添加附件的代码示例 2.3 注意事项 三、使用SSL/TLS加密连接 3.1 SSL/TLS加密的重要性 3.2 SSL/TLS加密的工作原理 3.3 在邮件发送中启用SSL/TLS 3.3.1 邮件客…

虚拟机安装xubuntu

新建一个新的虚拟机,选择自定义安装 默认下一步 选择稍后安装操作系统 选择所要创建的系统及版本 填写虚拟机的名称及创建的虚拟机保存的位置 选择处理器和内核的数量 处理器数量指的是:虚拟的CPU数量。 每个处理器的内核数量指的是:虚拟CPU…

梧桐数据库(WuTongDB):SQL Server Query Optimizer 简介

SQL Server Query Optimizer 是 SQL Server 数据库引擎的核心组件之一,负责生成查询执行计划,以优化 SQL 查询的执行性能。它的目标是根据查询的逻辑结构和底层数据的统计信息,选择出最优的查询执行方案。SQL Server Query Optimizer 采用基于…

应用密码学第一次作业(9.23)

一、Please briefly describe the objectives of information and network security,such as confidentiality, integrity, availability , authenticity , and accountability The objectives of information and network security include: Confidentiality: Protecting se…

MySQL的msi版本9.0在安装过程总结和需要注意的地方

下载 参考文档 [官方包快速下载](https://dev.mysql.com/downloads/mysql/) 使用zip文件安装可参考,这种直接把zip安装包解压到想要放的地方,并安装其中的方式一步步修改数据地址等配置即可。 个人使用了msi的安装文件 msi版本…

typename、非类型模板参数、模板参数的特化、模板类成员函数声明和定义分离、继承等的介绍

文章目录 前言一、typename二、非类型模板参数三、模板参数的特化1. 函数模板参数的特化2. 类模板的特化 四、模板类成员函数声明和定义分离1. 显示实例化(不建议使用)2. 将生命和定义写在同一个.h文件中 五、 继承总结 前言 typename、非类型模板参数、…

C++第七节课 运算符重载

一、运算符重载 并不是所有情况下都需要运算符重载&#xff0c;要看这个运算符对这个类是否有意义&#xff01; 例如&#xff1a;日期减日期可以求得两个日期之间的天数&#xff1b;但是日期 日期没有意义&#xff01; #include<iostream> using namespace std; clas…