使用 Windows 证书存储的 ODBC

来自 PostgreSQL Wiki
跳转到导航跳转到搜索

如何让 ODBC 驱动使用 Windows 证书存储

这只是一个快速概述所需内容。还应创建正式的用户文档。

  • 获取证书
    • 此证书应放置在 Windows 证书存储中,并带有私钥。
    • 可以使用 MMC 和证书管理插件验证此操作。
  • 使用 Windows 证书导出工具导出证书的公共部分。
    • 我使用 MMC 完成此操作,可能还有其他方法。
    • 确保以 "PEM 编码" 格式导出。
    • 应创建 .crt 文件(例如:user.crt)
  • 获取根链(可能可以从 Windows 证书存储中导出,或从证书颁发机构获取)。
    • 应采用 PEM 格式,并包含验证 *服务器* 证书所需的所有证书。
    • 应为 .crt 文件(例如:rootchain.crt)
  • 安装最新版本的 PG ODBC 驱动程序。
    • 按预期配置它,或多或少。
    • 使用 PostgreSQL Unicode(32 位或 64 位,但请确保根据使用情况运行正确的 ODBC 管理器)。
    • 数据源和描述可以是任何内容。
    • 数据库应该是 '正确的'。
    • SSL 模式:需要(如果两边都有有效证书,则应尝试使用 "verify-full")。
    • 服务器是 '正确的'。
    • 用户名:分配给用户的 *PG* 用户名(例如:sfrost)。
    • 密码:*空白*。
    • 在数据源下 - 选中 "Declare/Fetch"。
  • 设置环境变量
    • PG 关注三个环境变量。
    • PGSSLKEY
      • 此变量应设置为 "capi:用户名",例如 "capi:Stephen P Frost",其中 '用户名' 是证书的 CN,或 Windows 证书存储中显示的证书名称。
    • PGSSLCERT
      • 此变量需要设置为 user.crt 文件,例如 "C:\user.crt"。
    • PGSSLROOTCHAIN
      • 此变量需要设置为 rootchain.crt 文件,例如 "C:\rootchain.crt"。
    • OpenSSL 也需要一些东西。
      • 需要获取 capi.dll 文件并将其放置在 ODBC 安装目录中(见下文)。
      • 需要设置 OPENSSL_CONF 环境变量 - 应设置为 openssl.cfg 文件 - C:\Program Files (x86)\psqlODBC\0901\bin\openssl.cfg
      • 我们应该分发 openssl.cfg,但它需要以下信息。
 [openssl_init]
 oid_section = new_oids
 engines = engine_section
 
 [engine_section]
 capi = capi_config
 
 [capi_config]
 engine_id = capi
 dynamic_path = "c:\\program\ files\ \(x86\)\\psqlodbc\\0901\\bin\\capi.dll"
 init=1
  • 服务器端
    • 它非常简单,pg_hba.conf 中有关映射的文档提供了所有必要的信息。
    • 在 pg_hba.conf 中,需要类似以下内容。
      • hostssl all all 0.0.0.0/0 cert map=certmap
    • 然后,在 pg_ident.conf 中
      • certmap /"^Stephen P Frost$" sfrost
    • 在 postgresql.conf 中
      • ssl=true
    • 在您的数据目录中,您应该有以下真实文件或符号链接。
      • root.crt -- 根链
      • server.crt -- 服务器公钥证书
      • server.key -- 服务器私钥
  • 未来
    • 我已经要求 ODBC 维护人员在其分发中包含默认的 openssl.cfg(可能带有上面的节)和 capi.dll。
    • 我将与 PG 社区合作,让他们支持 CAPI 用于实际的证书和根链。
    • 显然,如果/当这些发生时,我们需要调整/缩减此文档。