- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 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 的文档中所述:
在 postgreSQL 9.4 中是否必须使用 PQinitOpenSSL
和 PQinitSSL
?
最佳答案
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_init
和 SSL_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
初始化,因此在这种情况下根本不需要PQinitOpenSSL
的do_crypto
。其他库可能需要它,而 OpenSSL 1.1.0 可能会改变这一点。但我认为它不适用于这种情况。
关于postgresql - PQinitOpenSSL 函数是否需要用 libpq 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35628845/
我使用 USE_SSL=1 选项构建了 libpq 静态库。使用的语法是: nmake.exe /f win32.mak USE_SSL=1 SSL_INC=C:\OpenSSL-Win32\incl
我是一名优秀的程序员,十分优秀!