calls to functions deprecated in OpenSSL 1.1 replaced with compatible ones
authorVictor Kirhenshtein <victor@netxms.org>
Sun, 8 Oct 2017 10:43:56 +0000 (13:43 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Sun, 8 Oct 2017 10:43:56 +0000 (13:43 +0300)
include/nxcpapi.h
src/libnetxms/crypto.cpp
src/server/core/cert.cpp
src/server/core/main.cpp

index b4fe33a..06dd874 100644 (file)
@@ -602,6 +602,7 @@ void LIBNETXMS_EXPORTABLE PrepareKeyRequestMsg(NXCPMessage *pMsg, RSA *pServerKe
 RSA LIBNETXMS_EXPORTABLE *LoadRSAKeys(const TCHAR *pszKeyFile);
 RSA LIBNETXMS_EXPORTABLE *RSAKeyFromData(const BYTE *data, size_t size, bool withPrivate);
 void LIBNETXMS_EXPORTABLE RSAFree(RSA *key);
+RSA LIBNETXMS_EXPORTABLE *RSAGenerateKey(int bits);
 
 #ifdef _WIN32
 BOOL LIBNETXMS_EXPORTABLE SignMessageWithCAPI(BYTE *pMsg, UINT32 dwMsgLen, const CERT_CONTEXT *pCert,
index e662800..5c3f163 100644 (file)
@@ -156,6 +156,29 @@ void LIBNETXMS_EXPORTABLE RSAFree(RSA *key)
    RSA_free(key);
 }
 
+/**
+ * Generate random RSA key
+ */
+RSA LIBNETXMS_EXPORTABLE *RSAGenerateKey(int bits)
+{
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+   BIGNUM *bne = BN_new();
+   if (!BN_set_word(bne, RSA_F4))
+      return NULL;
+   RSA *key = RSA_new();
+   if (!RSA_generate_key_ex(key, NETXMS_RSA_KEYLEN, bne, NULL))
+   {
+      RSA_free(key);
+      BN_free(bne);
+      return NULL;
+   }
+   BN_free(bne);
+   return key;
+#else
+   return RSA_generate_key(bits, RSA_F4, NULL, NULL);
+#endif
+}
+
 #endif   /* _WITH_ENCRYPTION */
 
 #if defined(_WITH_ENCRYPTION) && WITH_COMMONCRYPTO
index 92bfdfe..749a86d 100644 (file)
@@ -42,6 +42,18 @@ inline int EVP_PKEY_id(EVP_PKEY *key)
 }
 #endif
 
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+inline ASN1_TIME *X509_getm_notBefore(const X509 *x)
+{
+   return X509_get_notBefore(x);
+}
+
+inline ASN1_TIME *X509_getm_notAfter(const X509 *x)
+{
+   return X509_get_notAfter(x);
+}
+#endif
+
 /**
  * Server certificate file information
  */
@@ -200,14 +212,14 @@ X509 *IssueCertificate(X509_REQ *request, const char *ou, const char *cn, int da
       return NULL;
    }
 
-   if (X509_gmtime_adj(X509_get_notBefore(cert), 0) == NULL)
+   if (X509_gmtime_adj(X509_getm_notBefore(cert), 0) == NULL)
    {
       nxlog_debug(4, _T("IssueCertificate: cannot set start time"));
       X509_free(cert);
       return NULL;
    }
 
-   if (X509_gmtime_adj(X509_get_notAfter(cert), days * 86400) == NULL)
+   if (X509_gmtime_adj(X509_getm_notAfter(cert), days * 86400) == NULL)
    {
       nxlog_debug(4, _T("IssueCertificate: cannot set end time"));
       X509_free(cert);
@@ -299,23 +311,17 @@ bool GetServerCertificateOrganization(TCHAR *buffer, size_t size)
 /**
  * Create X509 certificate structure from login message
  */
-X509 *CertificateFromLoginMessage(NXCPMessage *pMsg)
+X509 *CertificateFromLoginMessage(NXCPMessage *msg)
 {
-       UINT32 dwLen;
-       BYTE *pData;
-       OPENSSL_CONST BYTE *p;
-       X509 *pCert = NULL;
-
-       dwLen = pMsg->getFieldAsBinary(VID_CERTIFICATE, NULL, 0);
-       if (dwLen > 0)
+       X509 *cert = NULL;
+   size_t len;
+   const BYTE *data = msg->getBinaryFieldPtr(VID_CERTIFICATE, &len);
+       if ((data != NULL) && (len > 0))
        {
-               pData = (BYTE *)malloc(dwLen);
-               pMsg->getFieldAsBinary(VID_CERTIFICATE, pData, dwLen);
-               p = pData;
-               pCert = d2i_X509(NULL, &p, dwLen);
-               free(pData);
+      OPENSSL_CONST BYTE *p = (OPENSSL_CONST BYTE *)data;
+               cert = d2i_X509(NULL, &p, (long)len);
        }
-       return pCert;
+       return cert;
 }
 
 /**
index af535d4..9378d9b 100644 (file)
@@ -388,8 +388,12 @@ static bool InitCryptografy()
                return FALSE;
    nxlog_debug(4, _T("Supported ciphers: %s"), (const TCHAR *)NXCPGetSupportedCiphersAsText());
 
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+   OPENSSL_init_ssl(0, NULL);
+#else
    SSL_library_init();
    SSL_load_error_strings();
+#endif
 
    if (LoadServerCertificate(&g_pServerKey))
    {
@@ -409,7 +413,7 @@ static bool InitCryptografy()
       if (g_pServerKey == NULL)
       {
          nxlog_debug(1, _T("Generating RSA key pair..."));
-         g_pServerKey = RSA_generate_key(NETXMS_RSA_KEYLEN, 17, NULL, NULL);
+         g_pServerKey = RSAGenerateKey(NETXMS_RSA_KEYLEN);
          if (g_pServerKey != NULL)
          {
             int fd = _topen(szKeyFile, O_WRONLY | O_BINARY | O_CREAT | O_TRUNC, 0600);