閒話不說,讓咱們來到正題。今天,咱們要分四個內容要講——一.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。
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 x509 -req -in ldap.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem -CAcreateserial -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)
至此,就安裝成功了,若是有問題,能夠在下面留言。