在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服务,并且测试通 ...
随机推荐
- poj 2739 Sum of Consecutive Prime Numbers 解题报告
题目链接:http://poj.org/problem?id=2739 预处理出所有10001以内的素数,按照递增顺序存入数组prime[1...total].然后依次处理每个测试数据.采用双重循环计 ...
- php5.4.3连接SQLite3
我使用的是WAMP2.2菜单-PHP-PHP extensions勾选php_sqlite3<?php$conn = new SQLite3("c:/wamp/www/test.db& ...
- 使用Memory Analyzer tool(MAT)分析内存泄漏(一)
转载自:http://www.blogjava.net/rosen/archive/2010/05/21/321575.html 前言 在平时工作过程中,有时会遇到OutOfMemoryError,我 ...
- Androidi性能优化之多线程和同步
线程: 创建线程的方法: a:定义Thread类的实例,并start(); b:实现Runnable接口,并作为参数传给Thread类的实例,然后start(); 不管线程是通过什么方式创建的,它都有 ...
- MVC模式简介
MVC模式是一种表现模式,它将web应用程序分成三个主要部分即:模型(Model)视图(View)控制器(Controller)M:Model主要是存储或者是处理数据的模型,包含了用户使用的数据,业务 ...
- 分布式系统唯一ID生成方案汇总
系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,也常常为这个问题而纠结.生成ID的方法有很多,适应不同的场景.需求以及性能要求.所以有些比较复杂的系统会有多个ID生成的策略.下面就介绍一些常见 ...
- Windbg 双机代码同步调试设置
Windbg的设置 Windbg的设置 Windbg本身可以直接从微软的网站上下载下载地址:http://www.microsoft.com/whdc/devtools/debugging/defau ...
- 【HTML5】Canvas画布
什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...
- 【框架】RefreshListView下拉刷新
布局: <com.example.administrator.d30_myrefreshlistview.RefreshListView android:id="@+id/refres ...
- 国家与城市的sql
--省表 create table tb_province ( pID int NOT NULL PRIMARY KEY, pName ) ) --省 ,'北京市') ,'天津市') ,'上海市') ...