gpt4 book ai didi

postgresql - PQinitOpenSSL 函数是否需要用 libpq 调用?

转载 作者:行者123 更新时间:2023-11-29 12:19:14 25 4
gpt4 key购买 nike

我使用 USE_SSL=1 选项构建了 libpq 静态库。使用的语法是:

nmake.exe /f win32.mak USE_SSL=1 SSL_INC=C:\OpenSSL-Win32\include SSL_LIB_PATH=C:\OpenSSL-Win32\lib

我可以使用下面的命令连接到数据库服务器

strconnection="hostaddr= machine_ip port=5432 user=postgres password=postgres dbname=postgres sslmode=require" ;

ptr_db_conn = (_TCHAR*)LPCTSTR(strconnection);
_conn = PQconnectdb(ptr_db_conn);
if ( PQstatus(m_conn) != CONNECTION_OK)
{
T_RESULT=FALSE;
}
else
{
T_RESULT=TRUE;
}

...

将下面的两个函数与 sslmode=require 一起使用,如 31.18.1. Client Verification of Server Certificates 的文档中所述:

  1. void PQinitOpenSSL(int do_ssl, int do_crypto);
  2. void PQinitSSL(int do_ssl);

在 postgreSQL 9.4 中是否必须使用 PQinitOpenSSLPQinitSSL

最佳答案

Is it mandatory to use PQinitOpenSSL and PQinitSSL in postgreSQL 9.4?

控制文件是31.18.5. SSL Library Initialization :

If your application initializes libssl and/or libcrypto libraries and libpq is built with SSL support, you should call PQinitOpenSSL to tell libpq that the libssl and/or libcrypto libraries have been initialized by your application, so that libpq will not also initialize those libraries.

void PQinitOpenSSL(int do_ssl, int do_crypto);

When do_ssl is non-zero, libpq will initialize the OpenSSL library before first opening a database connection. When do_crypto is non-zero, the libcrypto library will be initialized. By default (if PQinitOpenSSL is not called), both libraries are initialized. When SSL support is not compiled in, this function is present but does nothing.

If your application uses and initializes either OpenSSL or its underlying libcrypto library, you must call this function with zeroes for the appropriate parameter(s) before first opening a database connection. Also be sure that you have done that initialization before opening a database connection.

因此,如果您的应用程序调用 OpenSSL 的 SSL_library_initSSL_load_error_strings,那么您调用 Postgres 的 PQinitOpenSSL 时使用 0。另见 Library Initialization在 OpenSSL wiki 上。

如果您的应用程序没有初始化 OpenSSL 库,那么您应该使用非 0 调用 Postgres 的 PQinitOpenSSL

极端情况似乎是:您包含第二个库,这样第二个库实际上会初始化 OpenSSL 库。在这种情况下,您需要确保第二个库在 libpq 之前加载,然后您的应用使用 0 调用 PQinitOpenSSL,因为第二个库调用初始化。

它也显示 PQinitSSL(int do_ssl) 为 0 或非 0 也可以。据我所知,OpenSSL 中没有明确的libcrypto 初始化,因此在这种情况下根本不需要PQinitOpenSSLdo_crypto。其他库可能需要它,而 OpenSSL 1.1.0 可能会改变这一点。但我认为它不适用于这种情况。

关于postgresql - PQinitOpenSSL 函数是否需要用 libpq 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com