diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp
index b91aaf0593a583d9393aff86d449fe6641588bce..f80e64c9651ebd18f4e12a24896462376d7d8f80 100644
--- a/indra/llcorehttp/examples/http_texture_load.cpp
+++ b/indra/llcorehttp/examples/http_texture_load.cpp
@@ -52,7 +52,7 @@
 
 void init_curl();
 void term_curl();
-unsigned long ssl_thread_id_callback(void);
+void ssl_thread_id_callback(CRYPTO_THREADID*);
 void ssl_locking_callback(int mode, int type, const char * file, int line);
 void usage(std::ostream & out);
 
@@ -624,7 +624,7 @@ void init_curl()
 		}
 
 		CRYPTO_set_locking_callback(ssl_locking_callback);
-		CRYPTO_set_id_callback(ssl_thread_id_callback);
+		CRYPTO_THREADID_set_callback(ssl_thread_id_callback);
 	}
 }
 
@@ -640,12 +640,12 @@ void term_curl()
 }
 
 
-unsigned long ssl_thread_id_callback(void)
+void ssl_thread_id_callback(CRYPTO_THREADID* pthreadid)
 {
 #if defined(WIN32)
-	return (unsigned long) GetCurrentThread();
+	CRYPTO_THREADID_set_pointer(pthreadid, GetCurrentThread());
 #else
-	return (unsigned long) pthread_self();
+	CRYPTO_THREADID_set_numeric(pthreadid, pthread_self());
 #endif
 }
 
diff --git a/indra/llcorehttp/tests/llcorehttp_test.cpp b/indra/llcorehttp/tests/llcorehttp_test.cpp
index a310fc0508e1e3d5ebc8f681233665d6a4978bbf..d2df15ed5fd76e3c6a04ccc92ef97bce601315ee 100755
--- a/indra/llcorehttp/tests/llcorehttp_test.cpp
+++ b/indra/llcorehttp/tests/llcorehttp_test.cpp
@@ -48,7 +48,7 @@
 #include "llproxy.h"
 #include "llcleanup.h"
 
-unsigned long ssl_thread_id_callback(void);
+void ssl_thread_id_callback(CRYPTO_THREADID*);
 void ssl_locking_callback(int mode, int type, const char * file, int line);
 
 #if 0	// lltut provides main and runner
@@ -93,7 +93,7 @@ void init_curl()
 		}
 
 		CRYPTO_set_locking_callback(ssl_locking_callback);
-		CRYPTO_set_id_callback(ssl_thread_id_callback);
+		CRYPTO_THREADID_set_callback(ssl_thread_id_callback);
 	}
 
 	LLProxy::getInstance();
@@ -113,12 +113,12 @@ void term_curl()
 }
 
 
-unsigned long ssl_thread_id_callback(void)
+void ssl_thread_id_callback(CRYPTO_THREADID* pthreadid)
 {
 #if defined(WIN32)
-	return (unsigned long) GetCurrentThread();
+	CRYPTO_THREADID_set_pointer(pthreadid, GetCurrentThread());
 #else
-	return (unsigned long) pthread_self();
+	CRYPTO_THREADID_set_numeric(pthreadid, pthread_self());
 #endif
 }
 
@@ -172,5 +172,3 @@ void stop_thread(LLCore::HttpRequest * req)
 		}
 	}
 }
-
-	
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
index 5e7471550063aa2a981e6b19f5e2cab2d403e12c..be7a08ac41c8360b89c3e9310d0c970f9d7ebe31 100644
--- a/indra/llcrashlogger/llcrashlogger.cpp
+++ b/indra/llcrashlogger/llcrashlogger.cpp
@@ -642,7 +642,7 @@ void LLCrashLogger::init_curl()
         }
 
         CRYPTO_set_locking_callback(ssl_locking_callback);
-        CRYPTO_set_id_callback(ssl_thread_id_callback);
+        CRYPTO_THREADID_set_callback(ssl_thread_id_callback);
     }
 }
 
@@ -658,12 +658,12 @@ void LLCrashLogger::term_curl()
 }
 
 
-unsigned long LLCrashLogger::ssl_thread_id_callback(void)
+void LLCrashLogger::ssl_thread_id_callback(CRYPTO_THREADID* pthreadid)
 {
 #if LL_WINDOWS
-    return (unsigned long)GetCurrentThread();
+    CRYPTO_THREADID_set_pointer(pthreadid, GetCurrentThread());
 #else
-    return (unsigned long)pthread_self();
+    CRYPTO_THREADID_set_numeric(pthreadid, pthread_self());
 #endif
 }
 
diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h
index 56e26c23ba3f49ae4264d1c1dbb9f075913bd813..e3e8110a476efec340ac9bdd070e20423866fc1b 100644
--- a/indra/llcrashlogger/llcrashlogger.h
+++ b/indra/llcrashlogger/llcrashlogger.h
@@ -36,6 +36,11 @@
 #include "llcrashlock.h"
 #include "_mutex.h"
 
+// We shouldn't have to know the exact declaration of CRYPTO_THREADID, but VS
+// 2017 complains if we forward-declare it as simply 'struct CRYPTO_THREADID'.
+struct crypto_threadid_st;
+typedef crypto_threadid_st CRYPTO_THREADID;
+
 // Crash reporter behavior
 const S32 CRASH_BEHAVIOR_ASK = 0;
 const S32 CRASH_BEHAVIOR_ALWAYS_SEND = 1;
@@ -68,7 +73,7 @@ class LLCrashLogger : public LLApp
 protected:
     static void init_curl();
     static void term_curl();
-    static unsigned long ssl_thread_id_callback(void);
+    static void ssl_thread_id_callback(CRYPTO_THREADID*);
     static void ssl_locking_callback(int mode, int type, const char * file, int line);
 
 	S32 mCrashBehavior;