Openldap只開啟TLS1.2,禁用SSL/V2、SSL/V3


1. 概述

  為啥要用TLS?

  Openldap默認使用簡單驗證,對slapd的所有訪問都使用明文密碼通過未加密通道進行。為了確保信息安全,需要對信息進行加密傳輸,SSL(Secure Sockets Layer)是一個可靠的解決方案。

  它使用X.509證書,由可信任第三方(Certificate Authority(CA))進行數字簽名的一個標准格式的數據。有效的數字簽名意味着已簽名的數據沒有被篡改。如果簽名的數據被更改,將不會通過驗證。

  SSL/TLS加密原理簡介

        SSL/TLS是基於PKI機制的加密方式,包括證書認證、密鑰交換、非對稱加密、對稱加密。SSL/TLS采用CA作為服務端核客戶端都信賴的具有權威性的組織,證書的頒發和認證都依賴於CA,並假定CA頒發的證書是可靠的、可信賴的,證書里面的內容是真實的、有效的,並可用於客戶機和服務器進行安全的可靠的通信加密。

  SSL/TLS證書用來認證服務器和客戶機雙方的身份,並用於密鑰交換的非對稱加密。密鑰交換完畢之后,就可以用這個密鑰做通信數據的對稱加密了,具體的加密算法是由客戶機和服務器相互協商得來的。服務器和客戶機由於SSL/TLS庫的不同以及用戶的配置不同,雙方支持的算法列表不完全相同,當雙方做SSL/TLS握手的時候,就需要將自己支持的算法列表以及優先順序告知對方,一旦對方按照優先順序找到了第一個支持的算法,那么協商完成,否則雙方協商失敗,SSL/TLS連接斷開。

2. 環境

 ldap版本:openldap-2.4.44-13.el7.x86_64
    系統版本:Centos7.4

    服務器信息:

hostname

ip

角色

node105

192.168.1.105

ldap client+CA

node107

192.168.1.107

ldap server

 

3. 步驟

以下命令均以root用戶執行,卻在https://www.cnblogs.com/swordfall/p/12119010.htmlOpenldap安裝部署 的基礎上。

3.1.  查看openldap版本

rpm -qa | grep openldap

3.2. 查看openldap server服務與SSL2/3、TLS等協議通信關系

  掃描IP和端口

openssl s_client -ssl3 -connect 192.168.1.215:389
或
nmap --script ssl-enum-ciphers -p389 node214(推薦)

  未切換TLS1.2協議之前,nmap掃描如下,包括SSLV3、TLS1、TLS1.1下的3DE、SSL RC4漏洞等:

  

3.3. CA服務器和openldap server配置私鑰公鑰

  root用戶登錄192.168.1.105機器

3.3.1 CA服務器創建根密鑰和CA簽名證書公鑰

  • 創建根密鑰CA.key(私鑰)
openssl genrsa -out CA.key 2048
  • 創建自簽名根證書CA.pem,證書有效期為1024天(CA證書,即公鑰)
openssl req -x509 -new -nodes -key CA.key -sha256 -days 1024 -out CA.pem

  執行上面的命令會出現如下信息,需要填寫並記住:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GD
Locality Name (eg, city) [Default City]:SZ
Organization Name (eg, company) [Default Company Ltd]:Tech
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:test
Email Address []:xxx@xxx.com

  紅色字體則為填寫的內容,需要記住!!!

3.3.2 LDAP Server 服務器創建私鑰和證書公鑰

  root用戶登錄192.168.1.107 ldap server服務器

  • LDAP服務器創建私鑰ldap.key
openssl genrsa -out ldap.key 2048
  • 創建證書簽名請求

  根據私鑰ldap.key創建ldap.csr簽名請求

openssl req -new -key ldap.key -out ldap.csr

  執行上面的命令會出現如下信息,需要填寫在CA服務器節點填寫的紅色字體:

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:GD
Locality Name (eg, city) [Default City]:SZ
Organization Name (eg, company) [Default Company Ltd]:Tech
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:test1
Email Address []:xxx@xxx.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:#輸入密碼test@123
An optional company name []:#不填寫enter跳過

  注意:

  在OpenLDAP服務器向CA申請證書簽署請求的時候,除了CommonName、Email Address以外,以上所有值必須和CA證書所填寫的信息保持一致,否則無法得到驗證。

3.3.3 CA服務器向openldap server簽發證書

  • 把openldap server的ldap.csr簽名請求發送到CA服務器中   

  在openldap server服務器192.168.1.107使用root用戶執行如下命令:

scp ldap.csr root@192.168.1.105:/root
  • 使用自定義根和CA簽署證書簽名請求生成ldap.crt證書

  在CA服務器192.168.1.105使用root用戶執行如下命令,給openldap server的ldap.csr簽名請求,生成ldap.crt證書,有效期1460天:

openssl x509 -req -in ldap.csr -CA CA.pem -CAkey CA.key -CAcreateserial -out ldap.crt -days 1460 -sha256

  執行上述命令,會出現如下命令:

Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Sep 18 08:22:46 2016 GMT
            Not After : Sep 18 08:22:46 2017 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = GD
            organizationName          = Tech
            organizationalUnitName    = IT
            commonName                = redpeak1
            emailAddress              = xx@xxx.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
               39:FB:0E:BD:7D:03:7E:F3:9E:C3:BE:5B:4D:45:8B:63:B7:8B:7F:26
            X509v3 Authority Key Identifier: 
                keyid:08:FF:94:52:EC:BD:97:12:5B:96:DD:1E:36:08:43:FF:AD:2F:7B:C8
Certificate is to be certified until Sep 18 08:22:46 2017 GMT (365 days)
Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

  填寫y,確認

3.3.4 openldap server下載簽發證書並安裝

  • CA服務器完成openldap server的簽發證書,並把該證書發送回給openldap server服務器,還需要把CA服務器的CA證書(公鑰)一並發送給openldap server服務器

  在CA服務器192.168.1.105使用root用戶執行如下命令:

scp /root/ldap.crt CA.pem root@192.168.1.107:/root
  • 在openldap server服務器192.168.1.107安裝證書(包括簽發證書和CA證書),並授予ldap用戶權限
cp ldap.key ldap.crt CA.pem /etc/openldap/certs/
chown -R ldap:ldap /etc/openldap/certs

3.5. 配置LDAP Server開啟TLS

在openldap server服務器192.168.1.107,使用root用戶執行

  • 編寫ldif文件,導入證書
vim certs.ldif

  certs.ldif配置內容為:

dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/ldap.crt

dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/openldap/certs/CA.pem
  • 執行命令導入配置到/etc/openldap/slapd.d/cn=config.ldif文件中
ldapmodify -Y EXTERNAL  -H ldapi:/// -f certs.ldif

  注意:

    該命令大概率失敗,報如下錯誤:

[root@node3 ~]# ldapmodify -Y EXTERNAL  -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0 modifying entry "cn=config" ldap_modify: Other (e.g., implementation specific) error (80)

  如報上述紅色字體錯誤,需要檢查/etc/openldap/certs目錄下的ldap.crt、ldap.key、CA.pem這三個文件的權限是否為644,可能還會繼續出現該錯誤,如果出現,則忽略跳過,執行下面的

[root@node215 ranger-usersync]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

執行ldapmodify命令出現的結果: modifying entry
"cn=config" ldap_modify: Inappropriate matching (18) additional info: modify/add: olcTLSCACertificateFile: no equality matching rule

  如報上述紅色字體,暫時不知原因,可以跳過進行第三步驟

  • 直接編輯/etc/openldap/slapd.d/cn=config.ldif文件

  注:一般情況下不直接修改

olcTLSCertificateFile: /etc/openldap/certs/ldap.crt
olcTLSCertificateKeyFile: /etc/openldap/certs/ldap.key
olcTLSCACertificateFile: /etc/openldap/certs/CA.pem

  

  •  更改服務配置文件/etc/openldap/ldap.conf
vim /etc/openldap/ldap.conf
# 配置認證方式
TLS_REQCERT  never
  • 重啟openldap server服務
systemctl start slapd
# 查看重啟后的服務狀態
systemctl status slapd

3.6. 配置LDAP Server的SSL/TLS的安全性

  •  使用root執行如下命令:
vim tls1.2.ldif

  配置內容如下:

dn: cn=config
changetype: modify
add: olcTLSProtocolMin
olcTLSProtocolMin: 3.3

dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!aNULL:!EDH:!EXP:!SSLV2:!eNULL

dn: cn=config
changetype: modify
add: olcTLSDHParamFile
olcTLSDHParamFile:  /etc/openldap/certs/slapd.dh.params

  注:

    • olcTLSProtocolMin: 3.3   Support TLSv1.2 or better
    • olcTLSCipherSuite: ECDHE-RSA-AES256-SHA384:AES256-SHA256:!RC4:HIGH:!MD5:!EDH:!EXP:!SSLV2:!eNULL    Strongest available ciphers only
  • 創建DH參數文件
openssl dhparam -out /etc/openldap/certs/slapd.dh.params.tmp 1024
mv /etc/openldap/certs/slapd.dh.params.tmp  /etc/openldap/certs/slapd.dh.params

  注:

    • Use of stronger ciphers can be enabled by ensuring there is a Diffie-Helman parameter file available.This file should be renewed on a period (weekly) basis.
  • 使用ldapmodify命令導入配置到/etc/openldap/slapd.d/cn=config.ldif文件中
ldapmodify -Y EXTERNAL  -H ldapi:/// -f tls1.2.ldif

3.7. 使用TLS=required配置OpenLDAP

  • 使用root用戶執行如下命令
vim force-ssl.ldif

  配置內容如下:

dn: olcDatabase={2}hdb,cn=config
changetype:  modify
add: olcSecurity
olcSecurity: tls=1
  • 執行命令導入配置到/etc/openldap/slapd.d/cn=config/ olcDatabase={2}hdb.ldif文件中
ldapmodify -v -Y EXTERNAL -H ldapi:/// -f force-ssl.ldif

3.8. 修改/etc/sysconfig/slapd文件

  在LDAP Server服務器節點192.168.1.107上修改slapd文件,如下:

SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

  注:添加ldaps:///,表明啟用加密端口636,對應的ldap:///則為

3.9. 修改完上述配置重啟openldap

systemctl restart slapd
systemctl status slapd

3.10. LDAP Client配置

  登錄各LDAP Client節點

  • 1 使用nslcd
authconfig --enableldap --enableldapauth --enableldaptls --ldapserver=ldap://192.168.1.107 --ldapbasedn='dc=apache,dc=org' --enablemkhomedir --update
  • 2 使用CA服務器證書

  從CA服務器獲取CA.pem證書

scp CA.pem root@192.168.1.107:/etc/openldap/cacerts/
  • 3 配置使用證書與驗證方式
vim /etc/openldap/ldap.conf

  配置內容如下:

TLS_CACERTDIR /etc/openldap/cacerts
TLS_CACERT /etc/openldap/cacerts/CA.pem
TLS_REQCERT never
  • 4 配置nslcd啟用start_tls
vim /etc/nslcd.conf

  nslcd.conf配置內容如下:

uri ldaps:// node107:636

# StartTLS
ssl start_tls
tls_cacertdir /etc/openldap/cacerts
tls_cacertfile /etc/openldap/cacerts/CA.pem
tls_reqcert never

       注:uri: ldap:// 192.168.1.107:389,啟用ldaps之后,這里需要改為ldaps:// node107:636;這里不把ldap改為ldaps也是服務也是可以正常運行的,這里為迎合修改tls協議的目的,統一切換為636加密端口;另外,最好把ip改為hostname,有些環境要求嚴格,不認ip,只認hostname。

  重啟nslcd

systemctl restart nslcd
systemctl enable nslcd
  • 5 指定LDAP檢索順序
vim /etc/nsswitch.conf

  nsswitch.conf變更內容為:

passwd:     files sss
shadow:     files sss
group:      files sss

    注: 第四步和第五步是強相關關系,uri改為ldaps后,nsswitch.conf里面只能用files sss配置;如果是ldap,則files sss或者files ldap都可以。

  • 6 LDAP sssd配置

       修改/etc/sssd/sssd.conf文件,添加如下內容:

[domain/default]
autofs_provider = ldap
ldap_schema = rfc2307bis
krb5_realm = REDPEAK.COM
ldap_search_base = dc=node3,dc=com
krb5_server = 192.168.1.107
id_provider = ldap 
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldaps://node107:636
ldap_id_use_start_tls = True
cache_credentials = True
ldap_tls_cacertdir = /etc/openldap/cacerts
ldap_tls_reqcert = allow

[sssd]
services = nss, pam, autofs
domains = default

[nss]
homedir_substring = /home

[pam]

[sudo]

[autofs]

[ssh]

[pac]

[ifp]

[secrets]

  注:紅色字體為修改內容

3.11. 測試TLS

  • 命令1
ldapwhoami -v -x -Z
ldap_initialize( <DEFAULT> )
anonymous
Result: Success (0)
ldapsearch -x -Z -H ldap://192.168.1.107 -b 'ou=Group,dc=hadoop,dc=apache,dc=org'

  會顯示出數據

  • 命令3
ldapsearch -x -H ldaps://192.168.1.103:636 -b 'ou=Group,dc=hadoop,dc=apache,dc=org'

  訪問ldaps://hostname:636,636為加密端口。

  • 會報錯,要求TLS驗證
ldapsearch -H ldaps://192.168.1.107
ldapsearch -Z ldap:/192.168.1.107
  • 登錄測試
id username
su - username
  • nmap端口掃描
nmap --script ssl-enum-ciphers -p389 192.168.1.107

 

  顯示只有TLS1.2

  需要先安裝nmap,安裝詳情請看https://blog.csdn.net/u010142437/article/details/80097869

3.12. openldap問題

  root用戶執行如下命令:

openssl req -new -key ldap.key -out ldap.csr

  報錯openssl.cnf文件找不到,如下:

  

   多添加-config /etc/pki/tls/openssl.cnf,如下:

openssl req -new -key ldap.key -out ldap.csr -config /etc/pki/tls/openssl.cnf

4. 參考資料

https://access.redhat.com/articles/1474813

https://blog.csdn.net/u011607971/article/details/86153804

https://blog.csdn.net/qq_41960479/article/details/103788338

https://blog.csdn.net/weixin_42167759/article/details/80509806

https://www.jb51.cc/bash/385993.html

https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_011_ca.html

https://www.linuxquestions.org/questions/linux-server-73/openldap-tls-config-edit-failing-4175563252/?__cf_chl_jschl_tk__=a966b6a18b283c6a1b6bb97890c1fa6f39e106b5-1618386492-0-AZP4RNO22O4Qyr8zFI9-wHCSbUiZZ6NSWgWcQvPb3idPmrGSAbopkXXax36D8CmNIw4_UoKc4ix_4BFDYnUcR45WL0_YElizylT40nV7J6d_AWN0NmzEY1b028mZ3M8hJs-3aqJb7eT_ketyZpO7XH60NnjB46u_XB7NiSIPiTzvbOOkcP-V6WlHS-qx18TbDGd-TvFAGezyND2FLAgVBp2H5xAjbgxS-Ch5PaaRsMHScmksffjxJSsUzZqErDHqYloz7NCBdumSRELIB3kdn3YNO6ipWr6XuOSDvYKrRYocbfDhicUVKxgLrXofspWFsf2-SoIes8WYtCAyb_IEoldKD5FS_BOWTQkC6x1upJ2FpzfZLU5npvaaPHGaUi53fwmDLSFnFAktDQTicuSMA4E1bKRpb0DdDX7yGyMYzJ1vuBpKW-MAP20ok2aaez90EA6F7uHayZHlh7WGGS_UKi0s_KacceGUhDFSw836wLgpFDp-SYESgo5ciqt32IXQcv1VW46YEkoks9snPkDYZz0

https://www.linuxquestions.org/questions/linux-server-73/openldap-disabling-ssl-ciphers-4175543664/?__cf_chl_jschl_tk__=66e9f5b4d27d28f60eefe3b3c9c7abe48cb8d1ad-1618300454-0-Ad0rP7tkI4iQOFE-Lh6coCIEmpZZLhKD0BfuLx2M5AtaHo-ZfoWcoJbzlIKjO8c0jJATn-XDeBNOfZIQOsWxIeVE8K_epka0Lem5K3L4zJBtEewdCDVSHVf6stakCgrqIEUJBLP0ujSF3BeT9HV6Ll6ZS4VGui9FN4TPi4i1a-9RKLAg8dMGT4RHSCdhsALHGgKX6bTGDZmo65cOqlZ-EnbwxwjU_zgmOZXylblcb696_dyDkAsQeOV55lrC4hwPIeEgXSAVmyeuqhBaXdMPdrzmrsXgDLf2TYwZ0EsHYaAMqe2GicFl_ov1btDUEJdMW4GRqFo2jtv3WKjdKfXc7bLDrLyZIH3hEfOYHRFjVBpLtdpJIc65FgNJBVZN9kwnwYE-CG2lDaNmkpzhr3jtZYKLvFXCbcWVtPC5-T1Eoj1AqiM_fl9KSlBNQcp5mcjPsHA_9EJLvcS21Jp2t6OOe89_ifpOJ1fvlPHqTvh0W392lKGuZXXIR7-JVHAXu48eL0Dq48YWC1edE3M1SQJAd5I

uri ldaps:// node107:636

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM