- commit 612c05efb3c3b243da603a3a050993281888b6e3
- Author: Arjen de Korte <build+github@de-korte.org>
- Date: Fri Mar 15 10:17:32 2019 +0100
-
- Add support for openssl-1.1.0 (#504)
-
- * Add support for openssl-1.1.0
-
- * Allow TLSv1 and higher (not just TLSv1)
-
- * Fix check for empty string
-
- * Report TLS handshake in debug mode
-
- * Update nut_check_libopenssl.m4
-
- * Update upsclient.c
-
- * Update netssl.c
-
- --- a/clients/upsclient.c
- +++ b/clients/upsclient.c
- @@ -299,11 +299,6 @@ int upscli_init(int certverify, const ch
- {
- #ifdef WITH_OPENSSL
- int ret, ssl_mode = SSL_VERIFY_NONE;
- -#if OPENSSL_VERSION_NUMBER >= 0x10000000L
- - const SSL_METHOD *ssl_method;
- -#else
- - SSL_METHOD *ssl_method;
- -#endif
- #elif defined(WITH_NSS) /* WITH_OPENSSL */
- SECStatus status;
- #endif /* WITH_OPENSSL | WITH_NSS */
- @@ -315,22 +310,32 @@ int upscli_init(int certverify, const ch
- }
-
- #ifdef WITH_OPENSSL
- -
- - SSL_library_init();
- - SSL_load_error_strings();
-
- - ssl_method = TLSv1_client_method();
- +#if OPENSSL_VERSION_NUMBER < 0x10100000L
- + SSL_load_error_strings();
- + SSL_library_init();
-
- - if (!ssl_method) {
- - return 0;
- - }
- + ssl_ctx = SSL_CTX_new(SSLv23_client_method());
- +#else
- + ssl_ctx = SSL_CTX_new(TLS_client_method());
- +#endif
-
- - ssl_ctx = SSL_CTX_new(ssl_method);
- if (!ssl_ctx) {
- upslogx(LOG_ERR, "Can not initialize SSL context");
- return -1;
- }
-
- +#if OPENSSL_VERSION_NUMBER < 0x10100000L
- + /* set minimum protocol TLSv1 */
- + SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
- +#else
- + ret = SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_VERSION);
- + if (ret != 1) {
- + upslogx(LOG_ERR, "Can not set minimum protocol to TLSv1");
- + return -1;
- + }
- +#endif
- +
- if (!certpath) {
- if (certverify == 1) {
- upslogx(LOG_ERR, "Can not verify certificate if any is specified");
- @@ -737,7 +742,7 @@ static int upscli_sslinit(UPSCONN_t *ups
- switch(res)
- {
- case 1:
- - upsdebugx(3, "SSL connected");
- + upsdebugx(3, "SSL connected (%s)", SSL_get_version(ups->ssl));
- break;
- case 0:
- upslog_with_errno(1, "SSL_connect do not accept handshake.");
- --- a/clients/upssched.c
- +++ b/clients/upssched.c
- @@ -794,7 +794,7 @@ static void parse_at(const char *ntype,
- }
-
- if (!strcmp(cmd, "EXECUTE")) {
- - if (ca1 == '\0') {
- + if (ca1[0] == '\0') {
- upslogx(LOG_ERR, "Empty EXECUTE command argument");
- return;
- }
- --- a/m4/nut_check_libopenssl.m4
- +++ b/m4/nut_check_libopenssl.m4
- @@ -58,7 +58,7 @@ if test -z "${nut_have_libopenssl_seen}"
-
- dnl check if openssl is usable
- AC_CHECK_HEADERS(openssl/ssl.h, [nut_have_openssl=yes], [nut_have_openssl=no], [AC_INCLUDES_DEFAULT])
- - AC_CHECK_FUNCS(SSL_library_init, [], [nut_have_openssl=no])
- + AC_CHECK_FUNCS(SSL_CTX_new, [], [nut_have_openssl=no])
-
- if test "${nut_have_openssl}" = "yes"; then
- nut_with_ssl="yes"
- --- a/server/netssl.c
- +++ b/server/netssl.c
- @@ -274,7 +274,7 @@ void net_starttls(nut_ctype_t *client, i
- {
- case 1:
- client->ssl_connected = 1;
- - upsdebugx(3, "SSL connected");
- + upsdebugx(3, "SSL connected (%s)", SSL_get_version(client->ssl));
- break;
-
- case 0:
- @@ -370,13 +370,7 @@ void ssl_init(void)
- {
- #ifdef WITH_NSS
- SECStatus status;
- -#elif defined(WITH_OPENSSL)
- -#if OPENSSL_VERSION_NUMBER >= 0x10000000L
- - const SSL_METHOD *ssl_method;
- -#else
- - SSL_METHOD *ssl_method;
- -#endif
- -#endif /* WITH_NSS|WITH_OPENSSL */
- +#endif /* WITH_NSS */
-
- if (!certfile) {
- return;
- @@ -386,18 +380,29 @@ void ssl_init(void)
-
- #ifdef WITH_OPENSSL
-
- +#if OPENSSL_VERSION_NUMBER < 0x10100000L
- SSL_load_error_strings();
- SSL_library_init();
-
- - if ((ssl_method = TLSv1_server_method()) == NULL) {
- + ssl_ctx = SSL_CTX_new(SSLv23_server_method());
- +#else
- + ssl_ctx = SSL_CTX_new(TLS_server_method());
- +#endif
- +
- + if (!ssl_ctx) {
- ssl_debug();
- - fatalx(EXIT_FAILURE, "TLSv1_server_method failed");
- + fatalx(EXIT_FAILURE, "SSL_CTX_new failed");
- }
-
- - if ((ssl_ctx = SSL_CTX_new(ssl_method)) == NULL) {
- +#if OPENSSL_VERSION_NUMBER < 0x10100000L
- + /* set minimum protocol TLSv1 */
- + SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
- +#else
- + if (SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_VERSION) != 1) {
- ssl_debug();
- - fatalx(EXIT_FAILURE, "SSL_CTX_new failed");
- + fatalx(EXIT_FAILURE, "SSL_CTX_set_min_proto_version(TLS1_VERSION)");
- }
- +#endif
-
- if (SSL_CTX_use_certificate_chain_file(ssl_ctx, certfile) != 1) {
- ssl_debug();
|