[PATCH 3 of 4] SSL: stop using deprecated RSA_generate_key() function

Maxim Dounin mdounin at mdounin.ru
Mon Jul 7 23:32:24 UTC 2014


Hello!

On Mon, Jul 07, 2014 at 03:02:14PM -0700, Piotr Sikora wrote:

> Hey Maxim,
> 
> > It's marked as deprecated in master branch, but not in the latest
> > release.  Try looking into the latest release docs, 1.0.1h -
> > doc/crypto/RSA_generate_key.pod doesn't even mention
> > RSA_generate_key_ex.
> 
> It's been deprecated before OpenSSL-0.9.8 release, see git history [1].

Correct link is:
https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=e9224c717711eefb30038c9b37c69795dda93c9a

And it looks like the only rationale for deprecation is a new 
interface introduced.

> OpenSSL's documentation is terrible source of information and that's
> not news - nginx itself is using a lot of undocumented functions,
> especially in the OCSP stapling code.

It's not about quality of OpenSSL's documentation, it's about the 
fact that OpenSSL itself doesn't care about said deprecation.

> > Sure, it can and likely will be helpful.  In this particular case
> > the replacement code seems to be too long though.  For
> > development needs, it will probably be enough to just return NULL
> > if OPENSSL_NO_DEPRECATED is defined.
> 
> Sigh, I really don't think that the amount of code is really a problem
> here... But if you're really unhappy with it, maybe let's just remove

The amount of code is certainly a problem, and it indicates that 
the "new" interface, uhm, have problems.

> the callback altogether? It's not like it's used with nginx's default
> ciphers list and I'm not aware of anything since Windows NT 4.0 that
> would require it.

I don't think it's time to remove it, but as I previously said, I 
will be fine with something like this:

diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -652,12 +652,16 @@ ngx_ssl_rsa512_key_callback(ngx_ssl_conn
 {
     static RSA  *key;
 
+#ifndef OPENSSL_NO_DEPRECATED
+
     if (key_length == 512) {
         if (key == NULL) {
             key = RSA_generate_key(512, RSA_F4, NULL, NULL);
         }
     }
 
+#endif
+
     return key;
 }
 

This won't change anything for normal builds, but will allow test 
builds with OPENSSL_NO_DEPRECATED defined.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list