在Windows上启用LDAPs
公司的环境比较特殊, 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的更多相关文章
- 在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认 ...
- windows 上 OpenSSH 服务 启用秘钥登录(微软真心逆天)
windows 上 OpenSSH 服务 启用秘钥登录(微软真心逆天) windows 安装 OpenSSH 服务 最近需要在windows 服务器上部署自动发布程序,那么就需要用到 scp 和 ss ...
- x64位windows上程序开发的注意事项
在Windows上面32位与64位的区别有: 1.指针大小的区别,sizeof(int *)在32bit下面是4个字节,在64bit下面是8个字节 2.size_t的区别,size_t在32bit下面 ...
- 在Windows上运行Linux
在Windows上运行Linux 之前了解过一些适用于linux的Windows子系统,最近又听人提起,于是在自己的Windows 10专业版上安装了一个Ubuntu.运行起来还真方便,以后在wind ...
- Windows上搭建远程访问服务
Windows上搭建远程访问服务 转自:https://blog.51cto.com/13871378/2153308?source=dra 概述:允许客户机通过拨号连接或虚拟专用网连接到公司局域网, ...
- 在Windows上使用Let加密IIS
在Windows上使用Let加密IIS https://weblog.west-wind.com/posts/2016/Feb/22/Using-Lets-Encrypt-with-IIS-on-Wi ...
- Windows 上的 SSH?使用 PowerShell Remoting 远程管理 Windows 服务器
作者:陈计节 个人博客:https://blog.jijiechen.com/post/powershell-remoting/ 在 Linux/Unix 世界里 SSH 是个好东西,SSH 是 Se ...
- 在 Windows 上可以用 Docker 吗?
作者:陈计节 个人博客:https://blog.jijiechen.com/post/docker-on-windows/ Docker,或者准确一点说,容器技术,在近几年里几乎成为了应用分发和集群 ...
- 在windows上搭建SSH服务踩过的坑
前两天安装了windows操作系统,想在windows上做内网穿透,所以就想在windows下启用ssh服务,今天就来讲一下我在搭建ssh服务中遇到的坑. 我显示在Mac下搭建了ssh服务,并且测试通 ...
随机推荐
- 重温CSS之背景、文本样式
CSS背景样式: 背景色:background-color属性,设置元素的背景色,如:div {background:blue;}--设置所有div元素的背景为蓝色: 背景图像:background- ...
- codeforces A. Sereja and Bottles 解题报告
题目链接:http://codeforces.com/problemset/problem/315/A 题目意思:有n个soda bottles,随后给出这n个soda bottles的信息.已知第 ...
- 自定义Notification
private static void updateProgressNotification(Context cxt, int appsCount, int percent, String appNa ...
- C++基础(2)
c++规定如果一个类对象是另外一类的数据成员,那么在创建对象的时候系统将自动调用那个类的构造函数. 析构函数的定义:析构函数也是特殊的类成员函数,它没有返回类型,没有参数,不能随意调用,也没有重载,只 ...
- Android自定义实现FlowLayout
实现FlowLayout 何为FlowLayout,如果对Java的Swing比较熟悉的话一定不会陌生,就是控件根据ViewGroup的宽,自动的往右添加,如果当前行剩余空间不足,则自动添加到下一行. ...
- mysqlroot passwd
grant all on *.* to 'root'@'192.168.0.%' identified by 'bloablabar'; 更改用户密码: update user set passwor ...
- 图解SQL的inner join、left join、right join、full outer join、union、union all的区别
SQL的Join语法有很多,inner join(等值连接) 只返回两个表中联结字段相等的行,left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,right join(右 ...
- Java Hour 18 来个CURD吧 (三)
有句名言,叫做10000小时成为某一个领域的专家.姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧. 本文作者Java 现经验约为18 Hour,请各位不吝赐教. 依赖Jar 包管 ...
- spring classpath & classpath*
classpath-找到系统类路径下的第一个匹配的配置文件 classpath*-找到系统类路径下的所有符合要求的配置文件 参考资料:http://www.micmiu.com/j2ee/spring ...
- ER-Studio的五种关系说明
1. identifying relationship: 1对多. 父实体的主键是子实体的外键(FK1),且FK1是主键. 2. no identifying, mandatory relations ...