--- /dev/null
+--- a/src/dtls.c
++++ b/src/dtls.c
+@@ -698,8 +698,10 @@ dtls dtls_create(uint16_t port)
+ if (!_ssl_initialized)
+ {
+ _ssl_initialized = true;
++#if OPENSSL_VERSION_NUMBER < 0x10100000L
+ SSL_load_error_strings();
+ SSL_library_init();
++#endif
+ }
+ if (!d)
+ goto fail;
+@@ -711,9 +713,9 @@ dtls dtls_create(uint16_t port)
+ goto fail;
+
+ #ifdef USE_ONE_CONTEXT
+- SSL_CTX *ctx = SSL_CTX_new(DTLSv1_method());
++ SSL_CTX *ctx = SSL_CTX_new(DTLS_method());
+ #else
+- SSL_CTX *ctx = SSL_CTX_new(DTLSv1_server_method());
++ SSL_CTX *ctx = SSL_CTX_new(DTLS_server_method());
+ #endif /* USE_ONE_CONTEXT */
+ if (!ctx)
+ {
+@@ -1002,6 +1004,7 @@ _client_psk(SSL *ssl,
+
+ bool dtls_set_psk(dtls d, const char *psk, size_t psk_len)
+ {
++#ifndef OPENSSL_NO_PSK
+ free(d->psk);
+ d->psk = malloc(psk_len);
+ if (!d->psk)
+@@ -1011,6 +1014,9 @@ bool dtls_set_psk(dtls d, const char *psk, size_t psk_len)
+ SSL_CTX_set_psk_client_callback(d->ssl_client_ctx, _client_psk);
+ SSL_CTX_set_psk_server_callback(d->ssl_server_ctx, _server_psk);
+ return true;
++#else
++ return false;
++#endif
+ }
+
+ bool dtls_cert_to_pem_buf(dtls_cert cert, char *buf, int buf_len)