是否需要使用libpq调用函数PQinitOpenSSL?

时间:2016-02-25 13:36:26

标签: postgresql openssl libpq

我使用$(document).ready(function(){ $("input").keyup(function(){ if($('td:first-of-type').text === $('td:nth-of-type(2)').val()){ $('span').css('cssText','display:block;'); } }); }); 选项构建了libpq静态库。使用的语法是:

USE_SSL=1

我可以使用以下命令命令

连接到数据库服务器
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; } ... 下面的两个函数,如31.18.1. Client Verification of Server Certificates中的文档所述:

  1. void PQinitOpenSSL(int do_ssl,int do_crypto);
  2. void PQinitSSL(int do_ssl);
  3. 在postgreSQL 9.4中使用sslmode=requirePQinitOpenSSL是否必须?

1 个答案:

答案 0 :(得分:1)

  

在postgreSQL 9.4中使用PQinitOpenSSL和PQinitSSL是强制性的吗?

控制文件为31.18.5. SSL Library Initialization

  

如果您的应用程序初始化libssl和/或libcrypto库和   libpq是用SSL支持构建的,你应该调用PQinitOpenSSL来告诉   libpq已经初始化了libssl和/或libcrypto库   通过您的应用程序,以便libpq也不会初始化它们   库。

void PQinitOpenSSL(int do_ssl, int do_crypto);
     

当do_ssl非零时,libpq将初始化OpenSSL库   在首次打开数据库连接之前。当do_crypto是   非零,libcrypto库将被初始化。默认情况下(如果   未调用PQinitOpenSSL),两个库都已初始化。当SSL   支持未编译,此函数存在但无效。

     

如果您的应用程序使用并初始化OpenSSL或其   在底层libcrypto库中,必须用零调用此函数   首次打开数据库之前的相应参数   连接。还要确保您之前已完成初始化   打开数据库连接。

因此,如果您的应用程序调用OpenSSL的SSL_library_initSSL_load_error_strings,那么您可以调用Postgres' {0}的PQinitOpenSSL。另请参阅OpenSSL wiki上的Library Initialization

如果您的应用程序没有初始化OpenSSL库,那么您应该拨打电话给Postgres'非{0&#39>的PQinitOpenSSL

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

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