信息安全相关 - 建设篇 - 安全加固

第一章 传输安全里从LDAP到LDAPS的安全加固

  • 信息安全相关 - 建设篇 - 安全加固
  • 前言
    • 前置条件
  • JumpServer堡垒机使用LDAPS协议
    • 检查config配置
    • 配置LDAPS
    • JumpServer验证LDAPS的传输是否加密
  • Php-fpm使用LDAPS协议
    • 宝塔面板下配置php-fpm
    • php-fpm验证LDAPS
  • NextCloud文档云系统使用LDAPS协议
    • 配置openldap
    • 宝塔面板检查SSL证书
    • 配置LDAPS
    • NextCloud验证LDAPS的传输是否加密
  • 参考来源

前言

诸如堡垒机、跳板机、OA系统、ERP软件、准入系统、运维或审计的等等各种业务系统,都会涉及到使用LDAP协议跟Active Directory目录服务或者RADIUS用户数据库等认证源做用户数据的对接,但传输过程中往往容易被中间人窃取,因为LDAP协议始终是明文传输,即为了加固传输安全,需要将LDAP协议加固到LDAPS协议。

  • 业务系统:支持LDAP协议和LDAPS协议的所有系统

前置条件

使用LDAPS协议需要SSL证书,此例使用自建的CA颁发的SSL证书实现LDAPS传输,以JumpServer、Linux的php-fpm服务、NextCloud等举例说明LDAPS协议如何实现,其他业务系统操作的原理大体一致。

1. JumpServer已跟内网域控对接LDAP,并且成功获取到LDAP用户数据
2. NextCloud已跟内网域控对接LDAP,并且成功获取到LDAP用户数据

JumpServer堡垒机使用LDAPS协议

检查config配置

# 检查jumpserver的config配置文件是否启用了https
[root@jumpserver ~]# grep -A 5 HTTPS /opt/jumpserver/config/config.txt
## HTTPS 配置, 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置
USE_LB=1                           # 启用HTTPS
HTTPS_PORT=443                     # 指定监听的https端口
SERVER_NAME=jumpserver.xxx.com     # 授权访问的https域名
SSL_CERTIFICATE=jumpserver.pem     # pem证书文件
SSL_CERTIFICATE_KEY=jumpserver.key # key私钥文件
# 检查jumpserver的web服务器ssl证书是否有效
[root@jumpserver ~]# openssl x509 -in /opt/jumpserver/config/nginx/cert/jumpserver.pem -text -noout
Certificate:Data:Version: 3 (0x2)Serial Number:...Signature Algorithm: sha256WithRSAEncryptionIssuer: DC=com, DC=xxx, CN=自建CAValidityNot Before: xxx  0 00:00:00 202x GMTNot After : xxx  0 05:00:00 202x GMTSubject: C=CN, ST=xxx, L=xxx, O=xxx Technology Co., Ltd., OU=xxx Department, CN=*.xxx.comSubject Public Key Info:...X509v3 extensions:X509v3 Subject Alternative Name: DNS:*.xxx.com......

配置LDAPS

LDAP的地址栏更换成ldaps://domain.com:636的形式即可完成

JumpServer验证LDAPS的传输是否加密

JumpServer使用验证连接性,并在Linux后台使用tcpdump抓636端口的包验证LDAPS

[root@jumpserver ~]# tcpdump -i any port 636
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
22:31:44.102260 IP 192.168.250.9.41388 > ad.xxx.com.ldaps: Flags [S], seq 3945830231, win 29200, options [mss 1460,sackOK,TS val 558954956 ecr 0,nop,wscale 7], length 0
22:31:44.102307 IP 192.168.250.9.41388 > ad.xxx.com.ldaps: Flags [S], seq 3945830231, win 29200, options [mss 1460,sackOK,TS val 558954956 ecr 0,nop,wscale 7], length 0
22:31:44.102327 IP jumpserver.xxx.com.41388 > ad.xxx.com.ldaps: Flags [S], seq 3945830231, win 29200, options [mss 1460,sackOK,TS val 558954956 ecr 0,nop,wscale 7], length 0
22:31:44.102645 IP ad.xxx.com.ldaps > jumpserver.xxx.com.41388: Flags [S.], seq 2213454242, ack 3945830232, win 8192, options [mss 1460,nop,wscale 8,sackOK,TS val 559796977 ecr 558954956], length 0
22:31:44.102666 IP ad.xxx.com.ldaps > 192.168.250.9.41388: Flags [S.], seq 2213454242, ack 3945830232, win 8192, options [mss 1460,nop,wscale 8,sackOK,TS val 559796977 ecr 558954956], length 0
22:31:44.102671 IP ad.xxx.com.ldaps > 192.168.250.9.41388: Flags [S.], seq 2213454242, ack 3945830232, win 8192, options [mss 1460,nop,wscale 8,sackOK,TS val 559796977 ecr 558954956], length 0
22:31:44.102716 IP 192.168.250.9.41388 > ad.xxx.com.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 558954956 ecr 559796977], length 0
22:31:44.102725 IP 192.168.250.9.41388 > ad.xxx.com.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 558954956 ecr 559796977], length 0
22:31:44.102734 IP jumpserver.xxx.com.41388 > ad.xxx.com.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 558954956 ecr 559796977], length 0
22:31:44.104027 IP 192.168.250.9.41388 > ad.xxx.com.ldaps: Flags [P.], seq 1:518, ack 1, win 229, options [nop,nop,TS val 558954957 ecr 559796977], length 517

跟踪seq 3945830231,可以发现JumpServer的源IP 192.168.250.9(Docker里边的IP会被代理成jumpserver.xxx.com)以TCP随机端口向AD域控的ldaps端口发起协议,并且成功建立TCP三次握手

Php-fpm使用LDAPS协议

php使用ldaps连接和修改密码

# php启用ldaps
ldap_set_option(NULL, LDAP_OPT_X_TLS_CACERTFILE,"/etc/pki/ca-trust/extracted/openssl/Custom-CA.cer"); # php调用ldap模块的ssl时引用的ca证书路径
ldap_set_option(NULL, LDAP_OPT_DEBUG_LEVEL, 7);             # 启用debug日志调试
putenv('LDAPTLS_REQCERT=never');                             # 不对ldaps客户端做响应
ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3);         # 启用LDAPv3版本,支持域名形式的url
ldap_set_option($ds, LDAP_OPT_REFERRALS, 0);                #

宝塔面板下配置php-fpm

[root@nginx ~]# vim /www/server/php/74/etc/php.ini
...
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = /etc/pki/ca-trust/extracted/openssl/Custom-CA.cer                    # php使用curl的ca证书信息[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile=/etc/pki/ca-trust/extracted/openssl/Custom-CA.cer               # php的openssl模块使用的ca文件路径; If openssl.cafile is not specified or if the CA file is not found, the
; directory pointed to by openssl.capath is searched for a suitable
; certificate. This value must be a correctly hashed certificate directory.
; Most users should not specify a value for this directive as PHP will
; attempt to use the OS-managed cert stores in its absence. If specified,
; this value may still be overridden on a per-stream basis via the "capath"
; SSL stream context option.
openssl.capath=/etc/pki/ca-trust/extracted/openssl                             # php的openssl模块使用的ca目录路径

php-fpm验证LDAPS

(略)

NextCloud文档云系统使用LDAPS协议

配置openldap

添加TLS_REQCERT allow选项

[root@nextcloud ~]# vim /etc/openldap/ldap.conf#
# LDAP Defaults
## See ldap.conf(5) for details
# This file should be world readable but not world writable.#BASE   dc=example,dc=com
#URI    ldap://ldap.example.com ldap://ldap-master.example.com:666#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          neverTLS_CACERTDIR   /etc/openldap/certs
TLS_REQCERT allow           ####################### 增加这一项即可
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON    on

宝塔后台重启Nginx和PHP服务

宝塔面板检查SSL证书

配置LDAPS

NextCloud验证LDAPS的传输是否加密

NextCloud使用验证连接性,并在Linux后台使用tcpdump抓636端口的包验证LDAPS

[root@nextcloud ~]# tcpdump -i any port 636
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
20:01:25.469282 IP NextCloud.xxx.com.41896 > ad.xxx.com.ldaps: Flags [S], seq 4037221096, win 29200, options [mss 1460,sackOK,TS val 73287137 ecr 0,nop,wscale 7], length 0
20:01:25.469589 IP ad.xxx.com.ldaps > NextCloud.xxx.com.41896: Flags [S.], seq 1111988770, ack 4037221097, win 8192, options [mss 1460,nop,wscale 8,sackOK,TS val 578588842 ecr 73287137], length 0
20:01:25.469653 IP NextCloud.xxx.com.41896 > ad.xxx.com.ldaps: Flags [.], ack 1, win 229, options [nop,nop,TS val 73287137 ecr 578588842], length 0
20:01:25.470057 IP NextCloud.xxx.com.41896 > ad.xxx.com.ldaps: Flags [P.], seq 1:290, ack 1, win 229, options [nop,nop,TS val 73287138 ecr 578588842], length 289
20:01:25.472242 IP ad.xxx.com.ldaps > NextCloud.xxx.com.41896: Flags [.], seq 1:1449, ack 290, win 2081, options [nop,nop,TS val 578588845 ecr 73287138], length 1448
20:01:25.472438 IP NextCloud.xxx.com.41896 > ad.xxx.com.ldaps: Flags [.], ack 1449, win 251, options [nop,nop,TS val 73287140 ecr 578588845], length 0
20:01:25.472627 IP ad.xxx.com.ldaps > NextCloud.xxx.com.41896: Flags [P.], seq 1449:2085, ack 290, win 2081, options [nop,nop,TS val 578588845 ecr 73287138], length 636

跟踪seq 4037221096,可以发现NextCloud的源IP NextCloud.xxx.com 以TCP随机端口向AD域控的ldaps端口发起协议,并且成功建立TCP三次握手

参考来源

  1. php使用ldaps连接和修改密码

传输安全里从LDAP到LDAPS的安全加固相关推荐

  1. ldap 统一认证 java_如何在你的系统里集成LDAP统一认证

    一.为什么需要统一认证 日常办公经常会有多套系统,如果各个系统各自维护一套用户认证,用户需要记住多个用户名密码. 系统各自管理用户认证的方式,不但会有重复建设的问题,用户体验也会差,经常会有用户忘记密 ...

  2. 组件分享之后端组件——基于Golang实现的基于LDAP V3协议的操作包ldap

    组件分享之后端组件--基于Golang实现的基于LDAP V3协议的操作包ldap 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续 ...

  3. Linux服务器Ldap安装及ldaps配置完整流程

    参考文章:presto中ldaps配置完整流程 - letsfly - 博客园 无法以ldaps模式连接到openldap服务器-Java 学习之路 一.keytool生成ssl协议需要的相关文件 1 ...

  4. LDAP 轻量级目录访问协议 介绍

    LDAPS 和 LDAP 区别 LDAP(轻型目录应用程序协议)和安全LDAP(LDAPS)是应用程序与基础结构中的网络目录或域控制器之间使用的连接协议.  注意,LDAP以明文形式传输通信,而LDA ...

  5. Openldap配置TLS加密传输(完整版——shell脚本实现[分别在客户端与服务器端执行脚本,实现TLS加密])

    此脚本中只是负责实现了TLS加密配置部分,openLDAP的编译安装以及设置是前期已经配置好的! 具体的配置看上上篇文章openLDAP的编译安装以及配置. 注意slapd.conf中的配置,脚本中为 ...

  6. Openldap配置TLS加密传输(完整版——shell脚本实现[即在客户端执行代码,即可实现TLS加密])

    此脚本中只是负责实现了TLS加密配置部分,openLDAP的编译安装以及设置是前期已经配置好的! 具体的配置看上上篇文章openLDAP的编译安装以及配置. 注意slapd.conf中的配置,脚本中为 ...

  7. oid 值 内存使用_如何使用Choerodon LDAP以及配置定时任务

    作者:李楷文 Choerodon作为多云管理平台,可以通过LDAP的方式对接企业已有的应用,通过同步用户到Choerodon平台,使企业用户无需注册就可使用LDAP的账户和密码登录到Choerodon ...

  8. 09-OpenLDAP加密传输配置

    OpenLDAP加密传输配置(CA服务器与openldap服务器异机) 阅读视图 环境准备 CA证书服务器搭建 OpenLDAP服务端与CA集成 OpenLDAP客户端配置 客户端测试验证 故障处理 ...

  9. linux ldap客户端工具,openldap(3)linux客户端 启用ldap、sssd 认证

    环境:CentOS 6.x 1,首先确保ldap服务器已经启用 tls/ssl 认证,并启动ldaps://传输协议 2,安装必要软件 # yum -y install sssd-ldap nss-p ...

最新文章

  1. Go开发者路线图2019,请收下这份指南
  2. 查看服务器CPU的个数、CPU的核数、多核超线程数
  3. dz mysql日志清理_Discuz教程:如何准确的清理数据库
  4. ASP.NET Web API 安全筛选器
  5. 并查集——集合(洛谷 P1621)
  6. 查看进程占用内存cpu信息,Linux命令—TOP
  7. http网络传输协议
  8. 图算法之k-Core
  9. 常用的分析方法论及分析框架
  10. 【图片新闻】俄罗斯的新型高超音速导弹每秒飞行近两英里,“锆石Zircon”很可能是不可阻挡的尖端防空武器
  11. 【WSL2教程】WSL迁移到非系统盘
  12. DSP28335入门教程:寄存器手册的下载
  13. 做网站用空间好还是服务器好,做网站如何选择正确的空间服务器
  14. lamp 配置mysql_LAMP环境搭建与配置
  15. 微信小程序页面跳转无效
  16. Pygame-飞机大战
  17. Airflow的安装:在线安装、离线安装、问题汇总
  18. 量子力学概论第一章---波函数
  19. 【机器学习】之机器学习方法的分类
  20. Mplus 结构方程模型建模笔记(一)

热门文章

  1. vim 中的替换命令
  2. OSChina 周四乱弹 —— 连繁育下一代的时间都没有
  3. C# Dictionary 获取键值对 KeyValuePair
  4. python中*args **kw到底是什么意思
  5. 关于DICOM文件的相关知识
  6. Expression常用方法使用
  7. Pikachu靶场通关秘籍(持续更新)
  8. Python保留字总结
  9. 【Python】模拟登陆房天下的总结
  10. SAP 01-初识AMDP(ABAP-Managed Database Procedure)