闲话不说,让我们来到正题。今天,我们要分四个内容要讲——一.keytool生成ssl协议需要的相关文件 二.基于OpenSSL自建CA和颁发SSL证书 三.ldaps服务器搭建 四.presto-ldap插件启用,以及如何使用客户端访问。(另外,简单说一下这里的环境,其中ldaps是搭建在linux上的,而其他的组件是搭建在我本机mac上的)
一.keytool生成ssl协议需要的相关文件
1.创建证书
keytool -genkey -v -keystore presto-private.keystore -alias presto-private -keyalg RSA -dname "CN=localhost, OU=, O=, L=, ST=, C=CN" -validity 20000 -keypass fvsord -storepass fvsord
这里的-dname选项要求填很多,其实真正要填的只有Common Name,通常填写你服务器的域名,或者你服务器的IP地址(localhost),其它都可以留空的.
2.导出证书,由客户端安装
keytool -export -alias presto-private -keystore presto-private.keystore -file presto-public.cer -storepass fvsord
3.客户端配置:(这里的alias不必与上面的一致)
keytool -import -alias presto-public -file presto-public.cer -keystore presto-public.store -storepass fvsord
4.可以通过下面的命令查看签名信息
keytool -v -list -keystore /usr/local/keystores/test/presto-test.keystore
关于keytool中各个选项的详解,我在这里就不再详细介绍了,毕竟,我们这一节的内容是presto中的ldaps。
二.基于OpenSSL自建CA和颁发SSL证书(linux默认已经安装了openssl,因此我在这里假设已经安装好openssl)
1.在linux中默认的CA路径是/etc/pki/CA,关于该路径,我们可以在vi /etc/pki/tls/openssl.cnf中看到,如下图所示:

默认安装的opnessl可能并没有其中的一些文件(夹),需要我们自己来创建。
2.在上面的文件中,我们要注意其中在[ policy_match ]中的设定的匹配规则,这里匹配规则与我们后面要生成的csr有关系。其实也就是在第一部分中讲到的-dname 选项中的各个条目。
在CA目录下创建两个文件:
touch index.txt serial
echo 00 > serial
3.生成根密钥(来到/etc/pki/CA目录)
cd /etc/pki/CA/
openssl genrsa -out private/cakey.pem 2048
4.生成根证书
使用req命令生成自签证书:
openssl req -new -x509 -key private/cakey.pem -out cacert.pem
这里会输入一些内容,与我们上面使用keytool创建证书是输入的内容大致一样,这里我们同样只关注Common Name。当然,C=CN也是必须的。
5.接下来,我们就可以为我们的ldap服务器生成ssl密钥(这里生成的密钥可以在ldap服务器上,也可以在上面的CA服务器上。假设我们在上面的CA服务器上生成密钥,另外,我们在 /usrl/local/CA目录下生成ssl密钥)
cd /usrl/local/CA
openssl genrsa -out ldap.key
6.为ldap生成证书签署请求
openssl req -new -key ldap.key -out ldap.csr
7.ca根据请求签发证书,得到.crt证书文件
openssl ca -in ldap.key -out ldap.crt
这里生成的证书为我们后面的ldap服务器的搭建做前提准备。
三.ldaps服务器搭建(以linux为例)
1.安装ldap
yum install -y openldap*
2.在网上看到上面安装后会有/usr/share/openldap-servers/slapd.conf.obsolete文件,而我在新版的Linux环境中安装多次后并没有找到该文件。往往需要我们自己手动完成,以下是测试通过的完整版本。
=================================================
include /etc/openldap/schema/corba.schema
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/duaconf.schema
include /etc/openldap/schema/dyngroup.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/java.schema
include /etc/openldap/schema/misc.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/openldap.schema
include /etc/openldap/schema/ppolicy.schema
include /etc/openldap/schema/collective.schema
access to *
by self write
by anonymous auth
by * read
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database bdb
suffix "dc=fly,dc=com"
rootdn "cn=sky,dc=fly,dc=com"
TLSCACertificateFile /etc/pki/CA/cacert.pem
TLSCertificateFile /usrl/local/CA/ldap.crt
TLSCertificateKeyFile /usrl/local/CA/ldap.key
TLSVerifyClient never
# Cleartext passwords, especially for the rootdn, should
# be avoid. See slappasswd(8) and slapd.conf(5) for details.
# Use of strong authentication encouraged.
rootpw {SSHA}YgXdmGu8hrIE10JMEhkW6p2QBfPF+62J
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
directory /var/lib/ldap
# Indices to maintain
index objectClass eq
=================================================
3.设置管理员密码
slappasswd
键入新密码后,会弹出生成的密码。我们将其粘到上面文件的rootpw后面,其间使用Tab键分隔。
4.修改slapd.conf 核心配置
database bdb
suffix "dc=fly,dc=com"
rootdn "cn=sky,dc=fly,dc=com"
rootpw {SSHA}YgXdmGu8hrIE10JMEhkW6p2QBfPF+62J
5.修改slapd.conf 权限配置
access to *
by self write
by anonymous auth
by * read
6.添加ssl认证
TLSCACertificateFile /etc/pki/CA/cacert.pem
TLSCertificateFile /usrl/local/CA/ldap.crt
TLSCertificateKeyFile /usrl/local/CA/ldap.key
TLSVerifyClient never
7.检测配置是否正确
slaptest -u
8.配置数据库
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
9.删除默认内容
rm -rf /etc/openldap/slapd.d/*
10.启动ldap
/usr/sbin/slapd -h 'ldaps://192.168.0.76:636/' -f /etc/openldap/slapd.conf -d 255
11.状态查看:
systemctl status slapd.service
12.使用客户端验证
我们这里的默认路径是/etc/openldap/ldap.conf
我们需要在最后添加
TLS_CACERT /etc/pki/CA/cacert.pem
然后,我们可以执行一下操作来验证我们是否安装好ldaps服务器:
ldapsearch -x -b "cn=sky,dc=fly,dc=com" -H ldaps://192.168.0.76:636
如果没有报异常,则ldaps服务安装成功。
四.presto-ldap插件启用
presto中如果启动了ssl认证,则同样要求启动ldaps认证。
对于启动ssl认证,我们需要在etc/config.properties这样配置:

另外,我们需要在etc/password-authenticator.properties文件中这样配置:
password-authenticator.name=ldap
ldap.url=ldaps://192.168.0.76:636
ldap.user-bind-pattern=cn=sky,dc=fly,dc=com
如果仅仅是上面的配置,还是不够,通常会报。因为我们并没有将ldaps的客户端证书添加到我们的presto相关文件中。

其实一开始我以为是要将ldaps中的文件(/usrl/local/CA/ldap.key或/etc/pki/CA/cacert.pem皆可)导入到上面配置的/usr/local/keystores/for-presto/presto-private.keystore中。但一直报上面的错,后来我追踪了源码,发现其就是使用jdk中的证书,所以,这里,我们应该将其中的证书添加到jdk中。这里我要执行的操作是:
sudo keytool -delete -alias ldap-remote-server -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit(更正为:sudo keytool -import -file /etc/pki/CA/cacert.pem -alias ldap-remote-server -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit)
至此,就安装成功了,如果有问题,可以在下面留言。
- usb由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备
在设备管理器的usb设备的属性中,显示提示“由于其配置信息(注册表中的)不完整或已损坏,Windows 无法启动这个硬件设备”.注册表坏了.经过查询,解决方法如下: 方法:打开注册表编辑器(开始--& ...
- hive中beeline取回数据的完整流程
这里我们从BeeLine.execute讲起. 接下来来到BeeLine.dispatch,这里的入参就是sql语句.方法的最后调用了Commands.sql,然后调用到了Commands.execu ...
- vue-cli中配置vuex流程和注意事项
本文目录 vue-cli下新建站 配置路由更改HelloWorld.vue组件到新建Home.vue组件 安装vuex 测试是否安装成功vuex一:vue-cli下新建站 a)新建文件夹vuexStu ...
- Velocity初探小结--Velocity在spring中的配置和使用
最近正在做的项目前端使用了Velocity进行View层的数据渲染,之前没有接触过,草草过了一遍,就上手开始写,现在又回头细致的看了一遍,做个笔记. velocity是一种基于java的模板引擎技术, ...
- Grunt搭建自动化web前端开发环境--完整流程
Grunt搭建自动化web前端开发环境-完整流程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位web前 ...
- 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程
我们在之前的文章中中已经讲到了正确部署运行cas server 和 在cas client中配置. 在此基础上 我们去掉了https的验证,启用了http访问的模式. 单点登录(七)-----实战-- ...
- jquery ajax thinkphp异步局部刷新完整流程
环境:ThinkPHP3.2.3,jQuery3.2 前言: 在一般的网站中,都需要用到jquery或者其他框架(比如angular)来处理前后端数据交互,thinkphp在后台也内置了一些函数用 ...
- Nginx:解析HTTP配置的流程
参考资料:深入理解Nginx(陶辉) 书中有详细的讲解,这里只用本人的理解梳理一下该流程. 一点提议:对于像我这样的新手,面对暂时看不懂章节,建议先往下看一下(可能就会有新的理解或灵感),而不要死磕在 ...
- 深入理解java:4.3.1. 框架编程之MyBatis---SQL语句执行的完整流程
Mybatis的整个的执行流程.如下图所示: 原理详解: MyBatis应用程序根据XML配置文件创建SqlSessionFactory, SqlSessionFactory在根据配置,配置来源于两个 ...
随机推荐
- Yii2 console执行定时脚本
为什么要做crontab脚本 我们的项目使用YII2开发,并不是很大的一个电商平台,pv.IP访问量并不是很高,但客户的数据是日积月累已经产生100万条数据了,之前更新订单等数据使用定时脚本直接访问内 ...
- net core体系-Standard-1概述
前言 早上起来.NET社区沸腾了,期待已久的.NET Core 2.0终于发布!根据个人经验,微软的产品一般在2.0时会趋于成熟,所以一个新的.Net开发时代已经来临!未来属于.NET Core. . ...
- Codeforces 439E Devu and Birthday Celebration 容斥
Devu and Birthday Celebration 我们发现不合法的整除因子在 m 的因子里面, 然后枚举m的因子暴力容斥, 或者用莫比乌斯系数容斥. #include<bits/std ...
- SpringBoot-异常问题总结
一:创建的SpringBoot项目之后测试访问接口报错: Whitelabel Error Page This application has no explicit mapping for /err ...
- 业务线接入前端异常监控sentry
1.前端异常处理的框架对比 是否开源 收费 语言 监控范围 sentry 是 自己搭建服务器(免费)价格 英文 Angular.AngularJs.Backbone.Ember.JavaScrip ...
- SVM:根据大量图片来精确实现人脸识别—Jason niu
from __future__ import print_function from time import time import logging import matplotlib.pyplot ...
- VS 2013Ultimate 开发过程中遇到的问题——listbox的隐藏问题,combobox.textchanged的中文问题
最近项目有需求,就是把一个combobox让它可以根据用户输入的汉字就行模糊查询出匹配的下拉框内容,很简单,是吧 但是!!!在开发中真是遇到了不少问题呢. 一.实现流程 1)我的实现思维是这样的,先把 ...
- 代码调用t.cn接口生成短址
新浪短网址接口的稳定性和跳转速度还是很给力的,现给出其API说明. 该接口支持两种返回格式:xml和json 对应的URL请求地址为: xml:http://api.t.sina.com.cn/sho ...
- Java Concurrency in Practice——读书笔记
Thread Safety线程安全 线程安全编码的核心,就是管理对状态(state)的访问,尤其是对(共享shared.可变mutable)状态的访问. shared:指可以被多个线程访问的变量 mu ...
- Python入门经典. 以解决计算问题为导向的Python编程实践
Python入门经典. 以解决计算问题为导向的Python编程实践(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1juLsew8UiOErRheQPOuTaw 提取 ...