- 浏览: 152220 次
- 性别:
- 来自: 北京
文章分类
最新评论
Some AD objects can be modified without running an ldaps connection. Things like passwords however, cannot.
This is a guide to getting ldaps running on a *nix machine.
Install OpenSSL and OpenLDAP
Duh :) I presume you've done this already. If not, check your distribution specific documentation. Check that you have LDAP and OpenSSL support by performing creating a php webpage like:
<?php phpinfo(); ?>
And then viewing it on your server.
Install Certificate Services on your Domain Controller
There are two types of setup you can have here. The first is a Certificate Authority (CA) that is configured as an Enterprise CA on your local domain or as simply a request to a Third Party CA. The second type of CA is a Standalone CA on your local domain.
The request methods are very similar but without precise command line arguments you'll find one or other won't work correctly.
We'll try to document both methods here as best we can. Much of this information has been compiled through trial, error and testing on both development and live Domain Controllers
Enterprise or Third Party CA's
This guide is for using Enterprise or Third Party Certificate Authorities
LDAP over SSL is not enabled by default on domain controllers, you must configure this by installing Certificate Services.
If you follow this guide from Microsoft you should be able to get SSL enabled.
In my own installation I came across a few stumbling blocks that may or may not affect you. If you use an external CA for your SSL certificate, rather than an self-signed one you probably won't get this problem!
After generating the .req request file running the recommended certreq -new request.inf request.req
and then using the Certification Authority console, and attempt to submit the request - no go. Lo and behold, |Microsoft KB 910249 came and bit me.
Certificate Request Processor
The request contains no certificate template information. 0×80094801 (-2146875391)
Denied by Policy Module 0×80094801, the request does not contain a certificate template extension or the Certificate Template request attribute.
Microsoft's resolution: Generate the request some other way.
Stuff that.
Here's the solution I found after 5 minutes with Google
certreq -submit -attrib "CertificateTemplate: DomainController" request.req
The key is the extra attribute we add to force use of the template. The certificate is issued.
However I still had a problem with a DNS error message. In the end I actually used the IIS based certificate manager at http(s)://<IP of server>/certsrv and issued the certificate that way, then back the Microsoft guide.
Standalone CA's
This guide is for running Standalone Certificate Authorities, they cannot follow the same processes as Enterprise level CAs and will result in errors when trying to accept the certificates to the domain controller
This is based on the information from the Microsoft TechNet Article: Advanced Certificate Enrollment and Management
Firstly from your domain controller, run the following .vbs script
Set oArgs = WScript.Arguments Set oShell = WScript.CreateObject("WScript.Shell") ' ' Parse command line ' if oArgs.Count < 1 then sTemplateName = "DomainController" sType = "E" else if ((oArgs(0) = "-?") or (oARgs.Count < 2)) then Wscript.Echo "Usage: reqdccert.vbs [Templatename] [Type]" Wscript.Echo "[Templatename] is the name of a V2 template" Wscript.Echo "[Type] can be E for Email and A for Authentication certificate" Wscript.Echo "If no option is specified, the DomainController certificate template is used." Wscript.Quit 1 else sTemplateName = oArgs(0) sType = oArgs(1) end if end if Set oFilesystem = CreateObject("Scripting.FileSystemObject") Set objSysInfo = CreateObject("ADSystemInfo") Set objDC = GetObject("LDAP://" & objSysInfo.ComputerName) sGUID = objDC.GUID sDNShostname = objDC.DNShostname sHostname = objDC.cn '############################################################################## ' ' Create the ASN.1 file ' '############################################################################## Dim aASNsubstring(2, 5) Const HEX_DATA_LENGTH = 1 Const ASCIIDATA = 2 Const HEXDATA = 3 Const HEX_BLOB_LENGTH = 4 Const HEX_TYPE = 5 aASNsubstring(0, ASCIIDATA) = sDNShostname aASNsubstring(0, HEX_TYPE) = "82" ' ' Convert DNS name into Hexadecimal ' For i = 1 to Len(aASNsubstring(0, ASCIIDATA)) aASNsubstring(0, HEXDATA) = aASNsubstring(0, HEXDATA) & _ Hex(Asc(Mid(aASNsubstring(0, ASCIIDATA), i, 1))) Next aASNsubstring(0, HEX_DATA_LENGTH) = ComputeASN1 (Len(aASNsubstring(0, HEXDATA)) / 2) ' ' Build the ASN.1 blob for DNS name ' sASN = aASNsubstring(0, HEX_TYPE) & _ aASNsubstring(0, HEX_DATA_LENGTH) & _ aASNsubstring(0, HEXDATA) ' ' Append the GUID as other name ' if (sType = "E") then aASNsubstring(1, HEXDATA) = sGUID aASNsubstring(1, HEX_TYPE) = "A0" aASNsubstring(1, HEX_DATA_LENGTH) = ComputeASN1 (Len(aASNsubstring(1, HEXDATA)) / 2) sASN = sASN & _ "A01F06092B0601040182371901" & _ aASNsubstring(1, HEX_TYPE) & _ "120410" & _ aASNsubstring(1, HEXDATA) end if ' ' Write the ASN.1 blob into a file ' Set oFile = oFilesystem.CreateTextFile(sHostname & ".asn") ' ' Put sequence, total length and ASN1 blob into the file ' oFile.WriteLine "30" & ComputeASN1 (Len(sASN) / 2) & sASN oFile.Close ' ' Use certutil to convert the hexadecimal string into bin ' oShell.Run "certutil -f -decodehex " & sHostname & ".asn " & _ sHostname & ".bin", 0, True ' ' Use certutil to convert the bin into base64 ' oShell.Run "certutil -f -encode " & sHostname & ".bin " & _ sHostname & ".b64", 0, True '############################################################################## ' ' Create the INF file ' '############################################################################## Set iFile = oFilesystem.OpenTextFile(sHostname & ".b64") Set oFile = oFilesystem.CreateTextFile(sHostname & ".inf") oFile.WriteLine "[Version]" oFile.WriteLine "Signature= " & Chr(34) & "$Windows NT$" & Chr(34) oFile.WriteLine "" oFile.WriteLine "[NewRequest]" oFile.WriteLine "KeySpec = 1" oFile.WriteLine "KeyLength = 1024" oFile.WriteLine "Exportable = TRUE" oFile.WriteLine "MachineKeySet = TRUE" oFile.WriteLine "SMIME = FALSE" oFile.WriteLine "PrivateKeyArchive = FALSE" oFile.WriteLine "UserProtected = FALSE" oFile.WriteLine "UseExistingKeySet = FALSE" oFile.WriteLine "ProviderName = " & Chr(34) & _ "Microsoft RSA SChannel Cryptographic Provider" & Chr(34) oFile.WriteLine "ProviderType = 12" oFile.WriteLine "RequestType = PKCS10" oFile.WriteLine "KeyUsage = 0xa0" oFile.WriteLine "" oFile.WriteLine "[EnhancedKeyUsageExtension]" oFile.WriteLine "OID=1.3.6.1.5.5.7.3.1" oFile.WriteLine "OID=1.3.6.1.5.5.7.3.2" oFile.WriteLine ";" oFile.WriteLine "; The subject alternative name (SAN) can be included in the INF-file" oFile.WriteLine "; for a Windows 2003 CA." oFile.WriteLine "; You don't have to specify the SAN when submitting the request." oFile.WriteLine ";" oFile.WriteLine "[Extensions]" iLine = 0 Do While iFile.AtEndOfStream <> True sLine = iFile.Readline If sLine = "-----END CERTIFICATE-----" then Exit Do end if if sLine <> "-----BEGIN CERTIFICATE-----" then if iLine = 0 then oFile.WriteLine "2.5.29.17=" & sLine else oFile.WriteLine "_continue_=" & sLine end if iLine = iLine + 1 end if Loop oFile.WriteLine "Critical=2.5.29.17" oFile.WriteLine ";" oFile.WriteLine "; The template name can be included in the INF-file for any CA." oFile.WriteLine "; You don't have to specify the template when submitting the request." oFile.WriteLine ";" oFile.WriteLine ";[RequestAttributes]" oFile.WriteLine ";CertificateTemplate=" & sTemplateName oFile.Close iFile.Close '############################################################################## ' ' Create the certreq.exe command-line to submit the certificate request ' '############################################################################## Set oFile = oFilesystem.CreateTextFile(sHostname & "-req.bat") oFile.WriteLine "CERTREQ -attrib " _ & Chr(34) & "CertificateTemplate:" & sTemplateName _ & Chr(34) & " " & sHostname & ".req" ' ' The GUID structure needs to be reconstructed. The GUID is read ' as a string like f4aaa8576e6828418712b6ca89fbf5bc however the ' format that is required for the certreq command looks like ' 57a8aaf4-686e-4128-8712-b6ca89fbf5bc. The bytes are reordered ' in the following way: ' ' 11111111112222222222333 ' Position 12345678901234567890123456789012 ' |------|--|--|--|--------------| ' Original GUID: f4aaa8576e6828418712b6ca89fbf5bc ' ' 11 1 1111 1112 222222222333 ' Position 78563412 1290 5634 7890 123456789012 ' |------- |--- |--- |--- |----------| ' Reformatted GUID: 57a8aaf4-686e-4128-8712-b6ca89fbf5bc ' oFile.WriteLine "REM " oFile.WriteLine "REM !!! Only valid for Windows 2003 or later versions !!!" oFile.WriteLine "REM If you do not specify certificate extensions in the *.INF file" oFile.WriteLine "REM they can be specified here like the following example" oFile.WriteLine "REM " oFile.WriteLine "REM CERTREQ -submit -attrib " _ & Chr(34) & "CertificateTemplate:" & sTemplateName _ & "\n" _ & "SAN:guid=" _ & Mid(sGUID, 7, 2) _ & Mid(sGUID, 5, 2) _ & Mid(sGUID, 3, 2) _ & Mid(sGUID, 1, 2) & "-" _ & Mid(sGUID, 11, 2) _ & Mid(sGUID, 9, 2) & "-" _ & Mid(sGUID, 15, 2) _ & Mid(sGUID, 13, 2) & "-" _ & Mid(sGUID, 17, 4) & "-" _ & Mid(sGUID, 21, 12) _ & "&DNS=" & sDNShostname & Chr(34) & " " & sHostname & ".req" oFile.Close '############################################################################## ' ' Create the certificate verification script ' '############################################################################## Set oFile = oFilesystem.CreateTextFile(sHostname & "-vfy.bat") oFile.WriteLine "certutil -viewstore " & Chr(34) & objDC.distinguishedname & _ "?usercertificate" & chr(34) oFile.Close '############################################################################## ' ' Compute the ASN1 string ' '############################################################################## Function ComputeASN1 (iStrLen) If Len(Hex(iStrLen)) Mod 2 = 0 then sLength = Hex(iStrLen) else sLength = "0" & Hex(iStrLen) end if if iStrLen > 127 then ComputeASN1 = Hex (128 + (Len(sLength) / 2)) & sLength else ComputeASN1 = sLength End If End Function
This will create the following files
-
DC_Name.asn
-
DC_Name-req.bat
-
DC_Name-vfy.bat
-
DC_Name.b64
-
DC_Name.bin
-
DC_Name.inf
The only two files we are interested in are the .inf and .asn files.
Now from the command line prompt call the following (replacing request.inf with the actual names of your files)
certreq -new request.inf request.req
This will create a file called request.req
We then copy the request.req and the .asn files over to the CA. This is where things get more complicated.
Again from the command line we need to run
certreq -attrib "CertificateTemplate:DomainController" request.req
This will give us a request ID, this is important, make a note of it.
certutil -setextension <RequestID> 2.5.29.17 1 @<dcname>.asn
What Microsoft also doesn’t tell you here, is that if you are using Windows Server 2008, this command will not work unless you have loaded the command prompt with elevated priviledges (UAC). The subject alternative name, which is identified by the object identifier 2.5.29.17, is set with the attributes that are defined in the <dcname>.asn file. The fourth parameter that is set to “1” marks the extension as critical.
The TechNet ‘Processing Domain Controller Certificates‘ article mentions how to validate the certificate request is good, however we are assuming these tests come back as positive so next we need to issue and retrieve the certificate.
From the CA now run
certutil –resubmit <RequestID>
and then finally
CERTREQ -retrieve <RequestID> <dcname>.cer <dcname>.p7b
You will now have a .cer and a .p7b file which you can copy back to the domain controller.
To install the certificate, from the command line on the domain controller
CERTREQ -ACCEPT <dcname>.p7b
Microsoft tells you to restart the Domain Controller. In our experience this was not necessary and SSL over LDAP was available immediately
Export the CA Certificate
Apparently you are supposed to now export the CA certificate, and for some installations you may need to do this, and install it on your web server. I have not had to do this in any of my tests. In my tests, after installing the certificate on the domain controller I was able to connect over LDAPS immediately.
Tell Apache how to use LDAPs
Do a phpinfo() and check where the HOME variable points to in the Apache environment. Create a symbolic link or copy ldap.conf to this location.
If you get a connect error may be because your local OpenSSL installation doesn't recognise the certificate (or its authority) provided by the server. This can be circumvented by adding the following line to ldap.conf on your server or similar:
Change TLS_REQCERT allow
to TLS_REQCERT never
Apache must be able to read ldap.conf, you cannot skip this step.
Troubleshooting
☹
Unable to bind to server: Can't contact LDAP server
This is probably the most generic error. Use the console to check to make sure you can actually get a connection. There's no point chasing problems in PHP if you can't do it from the console.
ldapsearch -H "ldaps://dc01.mydomain.local" -b "" -s base -Omaxssf=0
The ldapsearch should spit back a whole bunch of stuff. If it doesn't, you need to troubleshoot the error message it gives you. Optionally add -d7 (debug level) to the command line above.
From the domain controller itself you can test if LDAP over SSL works
-
Start the Active Directory Administration Tool (Ldp.exe).
-
On the Connection menu, click Connect.
-
Type the name of the domain controller to which you want to connect.
-
Type 636 as the port number.
-
Click OK
RootDSE information should print in the right pane, indicating a successful connection.
发表评论
-
Linux date 命令使用技巧
2011-08-04 17:10 1038date命令 date命令的功能是显示和设置系统日期和时间 ... -
linux shell 自定义函数(定义、返回值、变量作用域)介绍
2011-03-31 15:50 3203linux shell 可以用户定义函数,然后在sh ... -
shell中的加法
2011-03-31 13:43 1524今天搞了半天i=$i+1;因为这句包含在一个较长的shell脚 ... -
Shell #的用法, ${#arrayname[@]}获取数组元素的个数, $arrayname[index]获取属于一个元素 获取数组中的所有元素${arr
2011-03-31 10:35 4015在shell中$#表示输入参数的个数; ... -
设置linux环境变量
2011-03-04 11:29 10141.Linux的变量种类 按变量的生存周期来划分,Lin ... -
Xlib: connection to ":0.0" refused by server的解决方法
2011-03-03 17:00 1097Xlib: connection to ":0.0& ... -
linux的root密码更改
2011-02-24 20:17 903不知道是很久没用的原因还是什么,我的linux的密码竟然 ... -
su与su-的区别(Linux Shell中切换用户)
2011-02-18 12:54 2701前者只是切换了身份,但SHELL环境仍然是原用户的SHEL ... -
在VI编辑器中让所有的字母都变成大写
2011-01-13 10:31 1577在vi中切换到命令行模式(按下ESC),输入以下正则表达 ... -
Linux常用的20个工具
2011-01-06 10:30 1302要监控服务器的运行状况? 尝试一些内建的命令行与少量的外围工具 ... -
tar命令详解
2011-01-05 16:35 856格式: tar 选项 文件目录列表功能: 对文件目录进 ... -
C指针的实质,对底层理解很有好处
2010-12-17 18:06 1616最近对C/C++指针特别感 ... -
网络配置===route命令和netstat命令
2010-12-15 17:03 1285route命令和netstat命令 (netstat - ... -
Linux 网卡配置文件设置
2010-12-15 13:57 12921.配置文件/etc/hosts(本地主机ip地址映射,可以有 ... -
linux设置目录共享
2010-12-10 11:15 9951 vi etc/samba/smb.conf 打开配置文档 ... -
Linux 双击文件夹 不要每次都打开一个新窗口显示
2010-11-25 16:35 1470在打开最顶层文件夹的时候用右键 里面有个浏览文件夹 就可以了 ... -
Linux文件权限详解
2010-11-24 16:24 851一、文件和目录权限概 ...
相关推荐
实验室设备管理系统 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B
PPT高效插件神器推荐-最新发布.zip
数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
Visio软件全套资源及教程-最新发布.zip
2000-2022年中国地级市生态韧性数据集(含原始数据、计算代码及结果,最新).zip
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源内容地址:https://blog.csdn.net/abc6838/article/details/143778060 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理
Jupyter-Notebook
1949-2021年中国民政统计年鉴-最新数据发布.zip
Jupyter-Notebook
Gartner推荐全球4家专注于通过自动化和人工智能支持SOC的优秀供应商.pdf
Jupyter-Notebook
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
53朱清清 劳动教育总结报告.doc
Jupyter-Notebook
Spss26统计软件最新版-最新发布.zip
【作品名称】:基于springboot mybatis+Mysql 实现的图书管理系统 【web课程设计 】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 主要功能 登录、注销、修改密码 管理员对图书信息的增删改查、查看读者、查看借阅记录 读者对图书信息的查看查询、修改个人信息、查看借阅记录 使用技术 数据库:mysql5.7 后端框架: SpringBoot HTML模板: ThymeLeaf 持久层: Mybatis UI: Bootstrap 登录验证和用户权限: SpringSecurity 使用说明 本项目使用maven进行管理,详细安装教程自行百度 需下载mysql图形化管理工具(例如Navicat),新建数据库library,右键数据库运行项目中的library.sql脚本 用IDE打开项目(建议使用i 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。
内容概要:本文详细介绍了用Python的Tkinter库创建动态心脏图形的过程。程序主要由几个部分组成:首先定义了一系列数学函数用于计算心形图的心脏坐标以及散射、收缩效果;然后构建了一个‘BeatingHeart’类来生成不同帧的心跳动画点集;最后,在主函数里调用了这个类的方法绘制出连续的心跳图像,展示了心脏的搏动过程。 适合人群:熟悉Python语言并且对Tkinter库有一定了解的开发者,特别是那些希望利用Python创建图形化应用或者动画模拟的人群。 使用场景及目标:适用于希望快速理解和实现基于Tkinter的基本二维图形与动画制作的学习者或开发者;同时也可以作为图形算法和物理模拟(如粒子系统)的教学案例。 阅读建议:本文涉及到多个函数之间的复杂调用关系,读者需要仔细跟踪每一步操作的具体意义及其参数含义。对于初学者而言,可以先尝试运行示例代码查看实际效果,然后再逐步理解每个部分的功能实现机制。
宏观面板数据整合(省市区三级)-最新数据.zip
空间计量软件及学习资料-最新更新.zip