公司的环境比较特殊, Windows server + Linux desktop, 所以我们希望在server端启用LDAP over SSL功能. 当中走了不少弯路, 网上文章也搜了一大堆, 千辛万苦终于搞定, 现在把过程记录下来.

域控制器: 基于Win2012R2, 搭建这个没什么难度所以过程省略.

证书服务器: Windows CA --> Ubuntu Server + OpenSSL --> Ubuntu Desktop + gnoMint, Windows CA太庞大, OpenSSL待研究, gnoMint简单方便

客户机: Ubuntu

先说说那些走过的弯路: 根据微软的KB生成证书请求文件, 再去OpenSSl里生成CA, 然后私钥公钥签发等等, 再将生成的证书导入到域控, 可惜始终无法成功.

后来干脆放弃命令行的OpenSSL, 使用了具有图形界面的gonMint. 步骤其实也很简单, 首先Add an autosigned CA, 然后Add a new certificate signing request (所以无需按照微软KB的格式生成证书请求文件), 这样就生成了根证书和它为域控签发的证书, 分别导出为cer和pfx格式.

将这两张证书导入域控, 其中根证书导入红色框, 域控证书导入蓝色框.

导入之后即可使用LDP.exe工具通过Port#636连接(注意: 连接时的服务器名必须和证书签发时的CN名一致)

ld = ldap_sslinit("DC1.ABC.LOCAL", , );
Error = ldap_set_option(hLdap, LDAP_OPT_PROTOCOL_VERSION, );
Error = ldap_connect(hLdap, NULL);
Error = ldap_get_option(hLdap,LDAP_OPT_SSL,(void*)&lv);
Host supports SSL, SSL cipher strength = bits
Established connection to DC1.ABC.LOCAL.
Retrieving base DSA information...
Getting entries:
以下省略-----------

对于希望从Linux客户端上通过ldapsearch命令查询的需求, 需要改动的地方稍微有点多.

1. vi /etc/ldap/ldap.conf 加入以下行:

HOST DC1.ABC.LOCAL
PORT
TLS_CACERT /home/chen/ca.crt ##指定根证书的路径

2. ldapsearch -x -LLL -D 'CN=administrator,CN=Users,DC=abc,DC=local' -W -H ldaps://DC1.ABC.LOCAL -b 'OU=vb-user,DC=abc,DC=local'

2015-8-13更新:

我们发现用gnoMint生成的证书, 所使用的签名算法是SHA1, 而且还无法更改. 但是这个算法即将被Google抛弃, 故在Chrome中依旧会显示为不安全连接. 所以我们准备使用openssl命令生成证书, 但是得到的证书死活无法成功使用LDAPs, 经过大半天的研究终于找到原因, 现记录如下:

左图是默认使用openssl导出的证书, 右边是修改了/etc/ssl/openssl.cnf参数的, 其中多了一项“增强型密钥用法”, 也就是微软KB文档中的 OID=1.3.6.1.5.5.7.3.1

具体修改的地方是[ usr_cert ]下面的extendedKeyUsage属性 (注意字母K和U为大写),将其设置为1.3.6.1.5.5.7.3.1即可。

2015-8-14更新:

还有个简单的办法, 就是使用图形化界面的tinyCA, 但是不知道为何在Ubuntu下没有SHA-256的加密算法(https://github.com/pld-linux/tinyca/blob/master/tinyca-sha2.patch), CentOS下却有.

参考网站:

https://support.microsoft.com/en-us/kb/321051

http://virtuallyhyper.com/2013/06/enabling-ldaps-on-windows-2008-active-directory-server/

https://www.digicert.com/ssl-certificate-installation-microsoft-active-directory-ldap-2012.htm

https://forums.opensuse.org/showthread.php/401522-Performing-ldapsearch-over-TLS-SSL-against-Active-Directory

http://serverfault.com/questions/571910/how-to-add-extended-key-usage-string-when-generating-a-self-signed-certificate-u

https://www.openssl.org/docs/manmaster/apps/x509v3_config.html

在Windows上启用LDAPs的更多相关文章

  1. 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理

    在Windows服务器上启用TLS 1.2及TLS 1.2基本原理 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理 最近由于Chrome40不再支持SSL 3.0了,GOOGLE认 ...

  2. windows 上 OpenSSH 服务 启用秘钥登录(微软真心逆天)

    windows 上 OpenSSH 服务 启用秘钥登录(微软真心逆天) windows 安装 OpenSSH 服务 最近需要在windows 服务器上部署自动发布程序,那么就需要用到 scp 和 ss ...

  3. x64位windows上程序开发的注意事项

    在Windows上面32位与64位的区别有: 1.指针大小的区别,sizeof(int *)在32bit下面是4个字节,在64bit下面是8个字节 2.size_t的区别,size_t在32bit下面 ...

  4. 在Windows上运行Linux

    在Windows上运行Linux 之前了解过一些适用于linux的Windows子系统,最近又听人提起,于是在自己的Windows 10专业版上安装了一个Ubuntu.运行起来还真方便,以后在wind ...

  5. Windows上搭建远程访问服务

    Windows上搭建远程访问服务 转自:https://blog.51cto.com/13871378/2153308?source=dra 概述:允许客户机通过拨号连接或虚拟专用网连接到公司局域网, ...

  6. 在Windows上使用Let加密IIS

    在Windows上使用Let加密IIS https://weblog.west-wind.com/posts/2016/Feb/22/Using-Lets-Encrypt-with-IIS-on-Wi ...

  7. Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器

    作者:陈计节 个人博客:https://blog.jijiechen.com/post/powershell-remoting/ 在 Linux/Unix 世界里 SSH 是个好东西,SSH 是 Se ...

  8. 在 Windows 上可以用 Docker 吗?

    作者:陈计节 个人博客:https://blog.jijiechen.com/post/docker-on-windows/ Docker,或者准确一点说,容器技术,在近几年里几乎成为了应用分发和集群 ...

  9. 在windows上搭建SSH服务踩过的坑

    前两天安装了windows操作系统,想在windows上做内网穿透,所以就想在windows下启用ssh服务,今天就来讲一下我在搭建ssh服务中遇到的坑. 我显示在Mac下搭建了ssh服务,并且测试通 ...

随机推荐

  1. 运行基准测试hadoop集群中的问题:org.apache.hadoop.ipc.RemoteException: java.io.IOException: File /benchmarks/TestDFSIO/io_data/test_

    在master(即:host2)中执行 hadoop jar hadoop-test-1.1.2.jar DFSCIOTest -write -nrFiles 12 -fileSize 10240 - ...

  2. js “+” 连接字符串&数字相加 数字相加出现多位小数 函数调用单引号双引号嵌套和转义字符的使用

    一.机制 JavaScript中,加号不仅表示相加还表示字符串连接 当加号两边存在字符串时,加号代表连接,实际上是将两侧都转为了字符串,如 "1" + 1 = "11&q ...

  3. oracle 10g 学习之PL/SQL简介和简单使用(10)

    PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问.由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理.PL/SQL是 P ...

  4. 使用javascript的stack数据结构,实现进制转换

    function Stack() { var items = []; this.push = function(element){ items.push(element); } this.pop = ...

  5. 浅谈K-SVD

    由于工作需要,最近刚刚看了一些K-SVD的介绍,这里给自己做一下小节. K-SVD我们一般是用在字典学习.稀疏编码方面,它可以认为是K-means的一种扩展,http://en.wikipedia.o ...

  6. 【现代程序设计】homework-08

    1. 理解C++变量的作用域和生命周期 a) 用少于10行代码演示你对局部变量的生命周期的理解 #include <iostream>int main() { ; ;i<;i++); ...

  7. CcTalk (网络协议)(转)

    ccTalk (发音作"see-see-talk")是一种广泛使用的串行协议,遍及货币交易和销售时点情报系统行业.如硬币和纸币验钞机等外部设备在多元化的自动支付设备如交通,票务,投 ...

  8. 【HTML5】表单元素

    * datalist datalist 元素规定输入域的选项列表. 列表是通过 datalist 内的 option 元素创建的. 如需把 datalist 绑定到输入域,请用输入域的 list 属性 ...

  9. [转]notepad++各种插件

    http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/npp_common_plugins.html

  10. linux中使用top获取进程的资源占用信息

    在linux中使用top获取进程的资源占用信息: Cpu(s):  1.0%us,  0.0%sy,  0.0%ni, 98.3%id,  0.7%wa,  0.0%hi,  0.0%si,  0.0 ...