presto中ldaps配置完整流程
最近開始轉戰presto,至於前面章節中的Hbase,我也會持續更新,喜歡我的可以關注我。關於這個流程,我看過阿里雲的的一篇文章,但看後還是不知所云,就寫下了這篇部落格,大家感興趣的可以訪問那篇文章—— https://yq.aliyun.com/articles/670066 。
閒話不說,讓我們來到正題。今天,我們要分四個內容要講——一.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
至此,就安裝成功了,如果有問題,可以在下面留言。