【问题标题】:How to make secure ldap connection with encrypted key?如何使用加密密钥建立安全的 ldap 连接?
【发布时间】:2019-12-10 02:34:15
【问题描述】:

我正在写下面的 ldap 客户端代码以连接到安全的 ldap 服务器。

import ldap
ldap.set_option(ldap.OPT_X_TLS_KEYFILE, 'a/b/key.txt')

但我的 key.txt 包含一个需要密码的加密密钥。

请告诉我如何为上述函数传递密码。

我正在使用 python-ldap 模块。

我还尝试通过将解密的密钥保存在 StringIO 对象中来使用 StringIO 对象,但是 set_option 方法期望的是字符串值而不是 StringIO 对象。

【问题讨论】:

    标签: python python-2.7 openldap stringio python-ldap


    【解决方案1】:

    python-ldap 模块是 OpenLDAP 包的包装器。不幸的是,OpenLDAP 无法使用受密码保护的私钥进行操作。并且您不能为密钥提供文件描述符,您应该提供一个路径或类似路径的对象以供 c 语言 open() 函数使用。你有几种方法:

    • 保持私钥解密(不是最好,但最简单);
    • 将私钥解密为临时文件或类文件对象,提供给ldap,然后删除;
    • 使用 Python ldap3 package;
    • 创建 LDAP 到 LDAP-TLS 代理

    部分 OpenLDAP 源代码,其中 OPT_X_TLS_KEYFILE 值用作 path 参数:

        static int
        tlsg_getfile( const char *path, gnutls_datum_t *buf )
        {
          int rc = -1, fd;
          struct stat st;
    
          fd = open( path, O_RDONLY );
          if ( fd >= 0 && fstat( fd, &st ) == 0 ) {
            buf->size = st.st_size;
            buf->data = LDAP_MALLOC( st.st_size + 1 );
            if ( buf->data ) {
              rc = read( fd, buf->data, st.st_size );
              close( fd );
              if ( rc < st.st_size )
                rc = -1;
              else
                rc = 0;
            }
          }
          return rc;
        }
    

    【讨论】:

      猜你喜欢
      • 2020-04-15
      • 2015-11-03
      • 1970-01-01
      • 2014-10-18
      • 2015-07-04
      • 2017-01-17
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多