公司的环境比较特殊, 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. Java for LeetCode 028 Implement strStr()

    Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...

  2. DFS:Red and Black(POJ 1979)

    红与黑 题目大意:一个人在一个矩形的房子里,可以走黑色区域,不可以走红色区域,从某一个点出发,他最多能走到多少个房间? 不多说,DFS深搜即可,水题 注意一下不要把行和列搞错就好了,我就是那样弄错过一 ...

  3. HDU1005&&NEFU67 没有循环节

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  4. [Android Pro] 监听Blutooth打开广播

    <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission a ...

  5. Android之自定义ViewGroup

    概述 在写代码之前,我必须得问几个问题: 1.ViewGroup的职责是啥? ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性, ...

  6. Sublime Text 插件 & 使用技巧

    20 个强大的 Sublime Text 插件http://blog.jobbole.com/58725/ 12个不可不知的Sublime Text应用技巧和诀窍http://segmentfault ...

  7. php 三元运算符使用说明和写法

    PHP三元运算的2种写法代码实例 首先,我们现在看一个简单的例子: 代码如下: <?php //写法一: $a = 2; ($a == 1) ? $test = "我们" : ...

  8. phpcms v9 如何实现用户登录

    因为有时候我们需要自己实现用户登录,比如我们用phpcms做一个微信Oauth2.0授权,授权之后直接登录,这过程中不需要用户输入账户和密码.所以我们就要搞清楚,phpcmsv9它是怎么实现用户登录的 ...

  9. 在getView方法产生给用户item的视图以及数据

    在getView方法产生给用户item的视图以及数据

  10. android 自定义弹出框AlertDialog ,很炫的哦

      于是就小小的模仿了下自己写了这个这样的效果,主要代码如下:dlg = new AlertDialog.Builder(context).create();dlg.show();dlg.getWin ...