Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-08 Thread Stefan Eissing via dev



> Am 08.07.2024 um 17:07 schrieb Yann Ylavic :
> 
> On Fri, Jul 5, 2024 at 5:59 PM Yann Ylavic  wrote:
>> 
>> On Fri, Jul 5, 2024 at 5:08 PM Ruediger Pluem  wrote:
>>> 
>>> On 7/5/24 4:09 PM, Stefan Eissing via dev wrote:
 
 The patches look good to me. I have not tested them as I have no old 
 openssl lying around, but I trust in your build tests.
>>> 
>>> Rebuild 2.4.61 with both patches from Yann on RedHat 7 - 9. All good now, 
>>> even on 7 with openssl 1.0.2 (means it compiles and no
>>> more implicit declaration warnings).
>>> @Yann: Care to commit the patches?
>> 
>> Will do on the weekend if/when possible, feel free to beat me to it if
>> you can ;)
> 
> r1919026.

Thanks, Yann!
> 
>> 
>> 
>> Regards;
>> Yann.




Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-08 Thread Yann Ylavic
On Fri, Jul 5, 2024 at 5:59 PM Yann Ylavic  wrote:
>
> On Fri, Jul 5, 2024 at 5:08 PM Ruediger Pluem  wrote:
> >
> > On 7/5/24 4:09 PM, Stefan Eissing via dev wrote:
> > >
> > > The patches look good to me. I have not tested them as I have no old 
> > > openssl lying around, but I trust in your build tests.
> >
> > Rebuild 2.4.61 with both patches from Yann on RedHat 7 - 9. All good now, 
> > even on 7 with openssl 1.0.2 (means it compiles and no
> > more implicit declaration warnings).
> > @Yann: Care to commit the patches?
>
> Will do on the weekend if/when possible, feel free to beat me to it if
> you can ;)

r1919026.

>
>
> Regards;
> Yann.


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Yann Ylavic
On Fri, Jul 5, 2024 at 5:08 PM Ruediger Pluem  wrote:
>
> On 7/5/24 4:09 PM, Stefan Eissing via dev wrote:
> >
> >
> >> Am 05.07.2024 um 15:44 schrieb Ruediger Pluem :
> >>
> >>
> >>
> >> On 7/5/24 3:40 PM, Yann Ylavic wrote:
> >>> On Fri, Jul 5, 2024 at 3:35 PM Yann Ylavic  wrote:
> 
>  On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
> >
> > md_crypt.c: In function 'md_cert_get_ct_scts':
> > md_crypt.c:2071:5: error: unknown type name 'SCT'
> >SCT *sct_handle;
> >
> > This one is caused by r1918195 in >= 2.4.60. Before r1918195 
> > OPENSSL_NO_CT was defined when openssl was < 1.1.1. Now it is not any
> > longer and hence md_cert_get_ct_scts gets a real function body as
> >
> > #ifndef OPENSSL_NO_CT
> >
> > (line 2068) is now true. Hence we error out on the non presence of the 
> > SCT struct (line 2071).
> 
>  Maybe something like the attached patch for this one too (which could
>  avoid configure tricks for both..).
> >>>
> >>> Or rather this one.
> >>>
> >>
> >>
> >> Looks good to me. Waiting for Stefan's feedback.
> >
> > The patches look good to me. I have not tested them as I have no old 
> > openssl lying around, but I trust in your build tests.
>
> Rebuild 2.4.61 with both patches from Yann on RedHat 7 - 9. All good now, 
> even on 7 with openssl 1.0.2 (means it compiles and no
> more implicit declaration warnings).
> @Yann: Care to commit the patches?

Will do on the weekend if/when possible, feel free to beat me to it if
you can ;)


Regards;
Yann.


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 4:09 PM, Stefan Eissing via dev wrote:
> 
> 
>> Am 05.07.2024 um 15:44 schrieb Ruediger Pluem :
>>
>>
>>
>> On 7/5/24 3:40 PM, Yann Ylavic wrote:
>>> On Fri, Jul 5, 2024 at 3:35 PM Yann Ylavic  wrote:

 On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
>
> md_crypt.c: In function 'md_cert_get_ct_scts':
> md_crypt.c:2071:5: error: unknown type name 'SCT'
>SCT *sct_handle;
>
> This one is caused by r1918195 in >= 2.4.60. Before r1918195 
> OPENSSL_NO_CT was defined when openssl was < 1.1.1. Now it is not any
> longer and hence md_cert_get_ct_scts gets a real function body as
>
> #ifndef OPENSSL_NO_CT
>
> (line 2068) is now true. Hence we error out on the non presence of the 
> SCT struct (line 2071).

 Maybe something like the attached patch for this one too (which could
 avoid configure tricks for both..).
>>>
>>> Or rather this one.
>>>
>>
>>
>> Looks good to me. Waiting for Stefan's feedback.
> 
> The patches look good to me. I have not tested them as I have no old openssl 
> lying around, but I trust in your build tests.

Rebuild 2.4.61 with both patches from Yann on RedHat 7 - 9. All good now, even 
on 7 with openssl 1.0.2 (means it compiles and no
more implicit declaration warnings).
@Yann: Care to commit the patches?

Regards

Rüdiger



Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Stefan Eissing via dev



> Am 05.07.2024 um 15:44 schrieb Ruediger Pluem :
> 
> 
> 
> On 7/5/24 3:40 PM, Yann Ylavic wrote:
>> On Fri, Jul 5, 2024 at 3:35 PM Yann Ylavic  wrote:
>>> 
>>> On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
 
 md_crypt.c: In function 'md_cert_get_ct_scts':
 md_crypt.c:2071:5: error: unknown type name 'SCT'
SCT *sct_handle;
 
 This one is caused by r1918195 in >= 2.4.60. Before r1918195 OPENSSL_NO_CT 
 was defined when openssl was < 1.1.1. Now it is not any
 longer and hence md_cert_get_ct_scts gets a real function body as
 
 #ifndef OPENSSL_NO_CT
 
 (line 2068) is now true. Hence we error out on the non presence of the SCT 
 struct (line 2071).
>>> 
>>> Maybe something like the attached patch for this one too (which could
>>> avoid configure tricks for both..).
>> 
>> Or rather this one.
>> 
> 
> 
> Looks good to me. Waiting for Stefan's feedback.

The patches look good to me. I have not tested them as I have no old openssl 
lying around, but I trust in your build tests.

Cheers,
Stefan

> 
> Regards
> 
> Rüdiger




Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 3:40 PM, Yann Ylavic wrote:
> On Fri, Jul 5, 2024 at 3:35 PM Yann Ylavic  wrote:
>>
>> On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
>>>
>>> md_crypt.c: In function 'md_cert_get_ct_scts':
>>> md_crypt.c:2071:5: error: unknown type name 'SCT'
>>> SCT *sct_handle;
>>>
>>> This one is caused by r1918195 in >= 2.4.60. Before r1918195 OPENSSL_NO_CT 
>>> was defined when openssl was < 1.1.1. Now it is not any
>>> longer and hence md_cert_get_ct_scts gets a real function body as
>>>
>>> #ifndef OPENSSL_NO_CT
>>>
>>> (line 2068) is now true. Hence we error out on the non presence of the SCT 
>>> struct (line 2071).
>>
>> Maybe something like the attached patch for this one too (which could
>> avoid configure tricks for both..).
> 
> Or rather this one.
> 


Looks good to me. Waiting for Stefan's feedback.

Regards

Rüdiger


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 3:26 PM, Yann Ylavic wrote:
> On Fri, Jul 5, 2024 at 3:16 PM Yann Ylavic  wrote:
>>
>> On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
>>>
>>>
>>>
>>> On 7/5/24 2:14 PM, Ruediger Pluem wrote:


 On 7/5/24 2:11 PM, Ruediger Pluem wrote:
>
>
> On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
>>
>>
>>> Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
>>>
>>> I just noticed that mod_md in 2.4.61 fails to compile with openssl < 
>>> 1.1.1. Below is the output against openssl 1.0.2 on RedHat 7:
>>>
>>> md_crypt.c: In function 'md_pkey_get_rsa_e64':
>>> md_crypt.c:982:5: warning: implicit declaration of function 
>>> 'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
>>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>> ^
>>> md_crypt.c:982:22: warning: initialization makes pointer from integer 
>>> without a cast [enabled by default]
>>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>>  ^
>>> md_crypt.c: In function 'md_pkey_get_rsa_n64':
>>> md_crypt.c:1002:22: warning: initialization makes pointer from integer 
>>> without a cast [enabled by default]
>>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>>  ^
>>>
>>> This was already the case with 2.4.59 and openssl 1.0.2. Hence we did not 
>>> fail to compile but loading of mod_md likely would fail
>>> as the symbol EVP_PKEY_get0_RSA is not available with openssl 1.0.2.
>>
>> This probably comes from r1913912 (2.4.x) which backported r1913616
>> (trunk) which changed EVP_PKEY_get1_RSA() => EVP_PKEY_get0_RSA(), the
>> former being probably available in < 1.1.1.
>> So the check for using EVP_PKEY_get{0,1}_RSA() or the new openssl >= 3
>> API should probably be something like:
>>
>> #if OPENSSL_VERSION_NUMBER < 0x10101000L
>> RSA *rsa = EVP_PKEY_get1_RSA(pkey->pkey);
>> if (rsa) {
>> const char *ret;
>> const BIGNUM *e;
>> RSA_get0_key(rsa, NULL, &e, NULL);
>> ret = bn64(e, p);
>> RSA_free(rsa);
>> return ret;
>> }
>> #elif OPENSSL_VERSION_NUMBER < 0x3000L
>> ...
>> #else
>> ...
>> #endif
>>
>> ?
> 
> Patch attached.

Looks good to me. Waiting for Stefan's feedback.

Regards

Rüdiger



Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Yann Ylavic
On Fri, Jul 5, 2024 at 3:35 PM Yann Ylavic  wrote:
>
> On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
> >
> >  md_crypt.c: In function 'md_cert_get_ct_scts':
> >  md_crypt.c:2071:5: error: unknown type name 'SCT'
> >  SCT *sct_handle;
> >
> > This one is caused by r1918195 in >= 2.4.60. Before r1918195 OPENSSL_NO_CT 
> > was defined when openssl was < 1.1.1. Now it is not any
> > longer and hence md_cert_get_ct_scts gets a real function body as
> >
> > #ifndef OPENSSL_NO_CT
> >
> > (line 2068) is now true. Hence we error out on the non presence of the SCT 
> > struct (line 2071).
>
> Maybe something like the attached patch for this one too (which could
> avoid configure tricks for both..).

Or rather this one.
Index: modules/md/md_crypt.c
===
--- modules/md/md_crypt.c	(revision 1918881)
+++ modules/md/md_crypt.c	(working copy)
@@ -63,7 +63,11 @@
 || LIBRESSL_VERSION_NUMBER >= 0x305fL)
 /* Missing from LibreSSL < 3.5.0 and only available since OpenSSL v1.1.x */
 #include 
+#define MD_HAVE_CT 1
 #endif
+#ifndef MD_HAVE_CT
+#define MD_HAVE_CT 0
+#endif
 
 static int initialized;
 
@@ -2037,11 +2061,10 @@ out:
 return rv;
 }
 
+#if MD_HAVE_CT
 #define MD_OID_CT_SCTS_NUM  "1.3.6.1.4.1.11129.2.4.2"
 #define MD_OID_CT_SCTS_SNAME"CT-SCTs"
 #define MD_OID_CT_SCTS_LNAME"CT Certificate SCTs" 
-
-#ifndef OPENSSL_NO_CT
 static int get_ct_scts_nid(void)
 {
 int nid = OBJ_txt2nid(MD_OID_CT_SCTS_NUM);
@@ -2065,7 +2088,7 @@ const char *md_nid_get_lname(int nid)
 
 apr_status_t md_cert_get_ct_scts(apr_array_header_t *scts, apr_pool_t *p, const md_cert_t *cert)
 {
-#ifndef OPENSSL_NO_CT
+#if MD_HAVE_CT
 int nid, i, idx, critical;
 STACK_OF(SCT) *sct_list;
 SCT *sct_handle;


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 3:16 PM, Yann Ylavic wrote:
> On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
>>
>>
>>
>> On 7/5/24 2:14 PM, Ruediger Pluem wrote:
>>>
>>>
>>> On 7/5/24 2:11 PM, Ruediger Pluem wrote:


 On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
>
>
>> Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
>>
>> I just noticed that mod_md in 2.4.61 fails to compile with openssl < 
>> 1.1.1. Below is the output against openssl 1.0.2 on RedHat 7:
>>
>> md_crypt.c: In function 'md_pkey_get_rsa_e64':
>> md_crypt.c:982:5: warning: implicit declaration of function 
>> 'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>> ^
>> md_crypt.c:982:22: warning: initialization makes pointer from integer 
>> without a cast [enabled by default]
>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>  ^
>> md_crypt.c: In function 'md_pkey_get_rsa_n64':
>> md_crypt.c:1002:22: warning: initialization makes pointer from integer 
>> without a cast [enabled by default]
>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>  ^
>>
>> This was already the case with 2.4.59 and openssl 1.0.2. Hence we did not 
>> fail to compile but loading of mod_md likely would fail
>> as the symbol EVP_PKEY_get0_RSA is not available with openssl 1.0.2.
> 
> This probably comes from r1913912 (2.4.x) which backported r1913616
> (trunk) which changed EVP_PKEY_get1_RSA() => EVP_PKEY_get0_RSA(), the
> former being probably available in < 1.1.1.
> So the check for using EVP_PKEY_get{0,1}_RSA() or the new openssl >= 3
> API should probably be something like:
> 
> #if OPENSSL_VERSION_NUMBER < 0x10101000L
> RSA *rsa = EVP_PKEY_get1_RSA(pkey->pkey);
> if (rsa) {
> const char *ret;
> const BIGNUM *e;
> RSA_get0_key(rsa, NULL, &e, NULL);
> ret = bn64(e, p);
> RSA_free(rsa);
> return ret;
> }
> #elif OPENSSL_VERSION_NUMBER < 0x3000L
> ...
> #else
> ...
> #endif
> 
> ?

I guess the core thing is the SCT stuff. Would it make sense to define 
OPENSSL_NO_CT with OPENSSL_VERSION_NUMBER < 0x1010L
again. This would make it compile again. Of course we need to fix 
EVP_PKEY_get{0,1}_RSA() stuff as you propose then as well.


Regards

Rüdiger



Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Yann Ylavic
On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
>
>  md_crypt.c: In function 'md_cert_get_ct_scts':
>  md_crypt.c:2071:5: error: unknown type name 'SCT'
>  SCT *sct_handle;
>
> This one is caused by r1918195 in >= 2.4.60. Before r1918195 OPENSSL_NO_CT 
> was defined when openssl was < 1.1.1. Now it is not any
> longer and hence md_cert_get_ct_scts gets a real function body as
>
> #ifndef OPENSSL_NO_CT
>
> (line 2068) is now true. Hence we error out on the non presence of the SCT 
> struct (line 2071).

Maybe something like the attached patch for this one too (which could
avoid configure tricks for both..).
Index: modules/md/md_crypt.c
===
--- modules/md/md_crypt.c	(revision 1918881)
+++ modules/md/md_crypt.c	(working copy)
@@ -57,12 +57,14 @@
 #include 
 #endif
 
-#if !defined(OPENSSL_NO_CT) \
-&& OPENSSL_VERSION_NUMBER >= 0x1010L \
-&& (!defined(LIBRESSL_VERSION_NUMBER) \
-|| LIBRESSL_VERSION_NUMBER >= 0x305fL)
+#if defined(OPENSSL_NO_CT)
+#define MD_NO_CT
+#elif (OPENSSL_VERSION_NUMBER >= 0x1010L \
+   && (!defined(LIBRESSL_VERSION_NUMBER) \
+   || LIBRESSL_VERSION_NUMBER >= 0x305fL))
 /* Missing from LibreSSL < 3.5.0 and only available since OpenSSL v1.1.x */
 #include 
+#undef MD_NO_CT
 #endif
 
 static int initialized;
@@ -2037,11 +2059,10 @@ out:
 return rv;
 }
 
+#ifndef MD_NO_CT
 #define MD_OID_CT_SCTS_NUM  "1.3.6.1.4.1.11129.2.4.2"
 #define MD_OID_CT_SCTS_SNAME"CT-SCTs"
 #define MD_OID_CT_SCTS_LNAME"CT Certificate SCTs" 
-
-#ifndef OPENSSL_NO_CT
 static int get_ct_scts_nid(void)
 {
 int nid = OBJ_txt2nid(MD_OID_CT_SCTS_NUM);
@@ -2065,7 +2086,7 @@ const char *md_nid_get_lname(int nid)
 
 apr_status_t md_cert_get_ct_scts(apr_array_header_t *scts, apr_pool_t *p, const md_cert_t *cert)
 {
-#ifndef OPENSSL_NO_CT
+#ifndef MD_NO_CT
 int nid, i, idx, critical;
 STACK_OF(SCT) *sct_list;
 SCT *sct_handle;


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Yann Ylavic
On Fri, Jul 5, 2024 at 3:16 PM Yann Ylavic  wrote:
>
> On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
> >
> >
> >
> > On 7/5/24 2:14 PM, Ruediger Pluem wrote:
> > >
> > >
> > > On 7/5/24 2:11 PM, Ruediger Pluem wrote:
> > >>
> > >>
> > >> On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
> > >>>
> > >>>
> >  Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
> > 
> >  I just noticed that mod_md in 2.4.61 fails to compile with openssl < 
> >  1.1.1. Below is the output against openssl 1.0.2 on RedHat 7:
> > 
> >  md_crypt.c: In function 'md_pkey_get_rsa_e64':
> >  md_crypt.c:982:5: warning: implicit declaration of function 
> >  'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
> >  const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
> >  ^
> >  md_crypt.c:982:22: warning: initialization makes pointer from integer 
> >  without a cast [enabled by default]
> >  const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
> >   ^
> >  md_crypt.c: In function 'md_pkey_get_rsa_n64':
> >  md_crypt.c:1002:22: warning: initialization makes pointer from integer 
> >  without a cast [enabled by default]
> >  const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
> >   ^
> >
> > This was already the case with 2.4.59 and openssl 1.0.2. Hence we did not 
> > fail to compile but loading of mod_md likely would fail
> > as the symbol EVP_PKEY_get0_RSA is not available with openssl 1.0.2.
>
> This probably comes from r1913912 (2.4.x) which backported r1913616
> (trunk) which changed EVP_PKEY_get1_RSA() => EVP_PKEY_get0_RSA(), the
> former being probably available in < 1.1.1.
> So the check for using EVP_PKEY_get{0,1}_RSA() or the new openssl >= 3
> API should probably be something like:
>
> #if OPENSSL_VERSION_NUMBER < 0x10101000L
> RSA *rsa = EVP_PKEY_get1_RSA(pkey->pkey);
> if (rsa) {
> const char *ret;
> const BIGNUM *e;
> RSA_get0_key(rsa, NULL, &e, NULL);
> ret = bn64(e, p);
> RSA_free(rsa);
> return ret;
> }
> #elif OPENSSL_VERSION_NUMBER < 0x3000L
> ...
> #else
> ...
> #endif
>
> ?

Patch attached.

>
>
> Regards;
> Yann.
Index: modules/md/md_crypt.c
===
--- modules/md/md_crypt.c	(revision 1918881)
+++ modules/md/md_crypt.c	(working copy)
@@ -978,7 +978,17 @@ static const char *bn64(const BIGNUM *b, apr_pool_
 
 const char *md_pkey_get_rsa_e64(md_pkey_t *pkey, apr_pool_t *p)
 {
-#if OPENSSL_VERSION_NUMBER < 0x3000L
+#if OPENSSL_VERSION_NUMBER < 0x10101000L
+RSA *rsa = EVP_PKEY_get1_RSA(pkey->pkey);
+if (rsa) {
+const char *ret;
+const BIGNUM *e;
+RSA_get0_key(rsa, NULL, &e, NULL);
+ret = bn64(e, p);
+RSA_free(rsa);
+return ret;
+}
+#elif OPENSSL_VERSION_NUMBER < 0x3000L
 const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
 if (rsa) {
 const BIGNUM *e;
@@ -998,7 +1008,17 @@ const char *md_pkey_get_rsa_e64(md_pkey_t *pkey, a
 
 const char *md_pkey_get_rsa_n64(md_pkey_t *pkey, apr_pool_t *p)
 {
-#if OPENSSL_VERSION_NUMBER < 0x3000L
+#if OPENSSL_VERSION_NUMBER < 0x10101000L
+RSA *rsa = EVP_PKEY_get1_RSA(pkey->pkey);
+if (rsa) {
+const char *ret;
+const BIGNUM *n;
+RSA_get0_key(rsa, &n, NULL, NULL);
+ret = bn64(n, p);
+RSA_free(rsa);
+return ret;
+}
+#elif OPENSSL_VERSION_NUMBER < 0x3000L
 const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
 if (rsa) {
 const BIGNUM *n;


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Yann Ylavic
On Fri, Jul 5, 2024 at 3:05 PM Ruediger Pluem  wrote:
>
>
>
> On 7/5/24 2:14 PM, Ruediger Pluem wrote:
> >
> >
> > On 7/5/24 2:11 PM, Ruediger Pluem wrote:
> >>
> >>
> >> On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
> >>>
> >>>
>  Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
> 
>  I just noticed that mod_md in 2.4.61 fails to compile with openssl < 
>  1.1.1. Below is the output against openssl 1.0.2 on RedHat 7:
> 
>  md_crypt.c: In function 'md_pkey_get_rsa_e64':
>  md_crypt.c:982:5: warning: implicit declaration of function 
>  'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
>  const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>  ^
>  md_crypt.c:982:22: warning: initialization makes pointer from integer 
>  without a cast [enabled by default]
>  const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>   ^
>  md_crypt.c: In function 'md_pkey_get_rsa_n64':
>  md_crypt.c:1002:22: warning: initialization makes pointer from integer 
>  without a cast [enabled by default]
>  const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>   ^
>
> This was already the case with 2.4.59 and openssl 1.0.2. Hence we did not 
> fail to compile but loading of mod_md likely would fail
> as the symbol EVP_PKEY_get0_RSA is not available with openssl 1.0.2.

This probably comes from r1913912 (2.4.x) which backported r1913616
(trunk) which changed EVP_PKEY_get1_RSA() => EVP_PKEY_get0_RSA(), the
former being probably available in < 1.1.1.
So the check for using EVP_PKEY_get{0,1}_RSA() or the new openssl >= 3
API should probably be something like:

#if OPENSSL_VERSION_NUMBER < 0x10101000L
RSA *rsa = EVP_PKEY_get1_RSA(pkey->pkey);
if (rsa) {
const char *ret;
const BIGNUM *e;
RSA_get0_key(rsa, NULL, &e, NULL);
ret = bn64(e, p);
RSA_free(rsa);
return ret;
}
#elif OPENSSL_VERSION_NUMBER < 0x3000L
...
#else
...
#endif

?


Regards;
Yann.


Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 2:14 PM, Ruediger Pluem wrote:
> 
> 
> On 7/5/24 2:11 PM, Ruediger Pluem wrote:
>>
>>
>> On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
>>>
>>>
 Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :

 I just noticed that mod_md in 2.4.61 fails to compile with openssl < 
 1.1.1. Below is the output against openssl 1.0.2 on RedHat 7:

 md_crypt.c: In function 'md_pkey_get_rsa_e64':
 md_crypt.c:982:5: warning: implicit declaration of function 
 'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
 const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
 ^
 md_crypt.c:982:22: warning: initialization makes pointer from integer 
 without a cast [enabled by default]
 const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
  ^
 md_crypt.c: In function 'md_pkey_get_rsa_n64':
 md_crypt.c:1002:22: warning: initialization makes pointer from integer 
 without a cast [enabled by default]
 const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
  ^

This was already the case with 2.4.59 and openssl 1.0.2. Hence we did not fail 
to compile but loading of mod_md likely would fail
as the symbol EVP_PKEY_get0_RSA is not available with openssl 1.0.2.

 md_crypt.c: In function 'md_cert_get_ct_scts':
 md_crypt.c:2071:5: error: unknown type name 'SCT'
 SCT *sct_handle;

This one is caused by r1918195 in >= 2.4.60. Before r1918195 OPENSSL_NO_CT was 
defined when openssl was < 1.1.1. Now it is not any
longer and hence md_cert_get_ct_scts gets a real function body as

#ifndef OPENSSL_NO_CT

(line 2068) is now true. Hence we error out on the non presence of the SCT 
struct (line 2071).

https://github.com/apache/httpd/blob/ecc67450d2da42d8724a5f5e8ef4cb92d4336ff2/modules/md/md_crypt.c#L2066-L2077

To summarize: With 2.4.59 it was already broken with openssl < 1.1.1 and not 
loadable but it still compiled. With 2.4.60+ it
now fails to compile.
Hence I think that checking the openssl version in configure is the correct 
thing to do.

Regards

Rüdiger




Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 2:11 PM, Ruediger Pluem wrote:
> 
> 
> On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
>>
>>
>>> Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
>>>
>>> I just noticed that mod_md in 2.4.61 fails to compile with openssl < 1.1.1. 
>>> Below is the output against openssl 1.0.2 on RedHat 7:
>>>
>>> md_crypt.c: In function 'md_pkey_get_rsa_e64':
>>> md_crypt.c:982:5: warning: implicit declaration of function 
>>> 'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
>>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>> ^
>>> md_crypt.c:982:22: warning: initialization makes pointer from integer 
>>> without a cast [enabled by default]
>>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>>  ^
>>> md_crypt.c: In function 'md_pkey_get_rsa_n64':
>>> md_crypt.c:1002:22: warning: initialization makes pointer from integer 
>>> without a cast [enabled by default]
>>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>>  ^
>>> md_crypt.c: In function 'md_cert_get_ct_scts':
>>> md_crypt.c:2071:5: error: unknown type name 'SCT'
>>> SCT *sct_handle;
>>> ^
>>> In file included from /usr/include/openssl/crypto.h:129:0,
>>> from /usr/include/openssl/bio.h:69,
>>> from /usr/include/openssl/err.h:124,
>>> from md_crypt.c:28:
>>> md_crypt.c:2084:29: error: 'SCT' undeclared (first use in this function)
>>>sct_handle = sk_SCT_value(sct_list, i);
>>> ^
>>> md_crypt.c:2084:29: note: each undeclared identifier is reported only once 
>>> for each function it appears in
>>> md_crypt.c:2084:29: error: expected expression before ')' token
>>>sct_handle = sk_SCT_value(sct_list, i);
>>> ^
>>> md_crypt.c:2087:21: warning: implicit declaration of function 
>>> 'SCT_get_version' [-Wimplicit-function-declaration]
>>> sct->version = SCT_get_version(sct_handle);
>>> ^
>>> md_crypt.c:2088:21: warning: implicit declaration of function 
>>> 'SCT_get_timestamp' [-Wimplicit-function-declaration]
>>> sct->timestamp = 
>>> apr_time_from_msec(SCT_get_timestamp(sct_handle));
>>> ^
>>> md_crypt.c:2089:21: warning: implicit declaration of function 
>>> 'SCT_get0_log_id' [-Wimplicit-function-declaration]
>>> len = SCT_get0_log_id(sct_handle, (unsigned 
>>> char**)&data);
>>> ^
>>> md_crypt.c:2091:21: warning: implicit declaration of function 
>>> 'SCT_get_signature_nid' [-Wimplicit-function-declaration]
>>> sct->signature_type_nid = 
>>> SCT_get_signature_nid(sct_handle);
>>> ^
>>> md_crypt.c:2092:21: warning: implicit declaration of function 
>>> 'SCT_get0_signature' [-Wimplicit-function-declaration]
>>> len = SCT_get0_signature(sct_handle,  (unsigned 
>>> char**)&data);
>>> ^
>>> make[4]: *** [md_crypt.slo] Error 1
>>> make[4]: *** Waiting for unfinished jobs
>>> make[4]: Leaving directory 
>>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules/md'
>>> make[3]: *** [shared-build-recursive] Error 1
>>> make[3]: Leaving directory 
>>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules/md'
>>> make[2]: *** [shared-build-recursive] Error 1
>>> make[2]: Leaving directory 
>>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules'
>>> make[1]: *** [shared-build-recursive] Error 1
>>> make[1]: Leaving directory 
>>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61'
>>> make: *** [all-recursive] Error 1
>>>
>>> I am not sure if we can do without these functions or the SCT structure and 
>>> in the end mod_md is still experimental for 2.4.x.
>>> But if we want to keep the code of mod_md as is in 2.4.x we probably should 
>>> add checks in the autoconf stuff that prevents it
>>> from being enabled on openssl < 1.1.1.
>>
>> Ok, the code is from 2019, meaning we did not have that combination working 
>> for a long time. I think checking the openssl version in configure seems the 
>> best approach.
> 
> I guess r1918195 in 2.4.x is the culprit which changed defines in the code as 
> I was able to compile 2.4.59 with Openssl 1.0.2 and
> mod_md.

Let me investigate deeper.

Regards

Rüdiger




Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Ruediger Pluem



On 7/5/24 2:04 PM, Stefan Eissing via dev wrote:
> 
> 
>> Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
>>
>> I just noticed that mod_md in 2.4.61 fails to compile with openssl < 1.1.1. 
>> Below is the output against openssl 1.0.2 on RedHat 7:
>>
>> md_crypt.c: In function 'md_pkey_get_rsa_e64':
>> md_crypt.c:982:5: warning: implicit declaration of function 
>> 'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>> ^
>> md_crypt.c:982:22: warning: initialization makes pointer from integer 
>> without a cast [enabled by default]
>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>  ^
>> md_crypt.c: In function 'md_pkey_get_rsa_n64':
>> md_crypt.c:1002:22: warning: initialization makes pointer from integer 
>> without a cast [enabled by default]
>> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>>  ^
>> md_crypt.c: In function 'md_cert_get_ct_scts':
>> md_crypt.c:2071:5: error: unknown type name 'SCT'
>> SCT *sct_handle;
>> ^
>> In file included from /usr/include/openssl/crypto.h:129:0,
>> from /usr/include/openssl/bio.h:69,
>> from /usr/include/openssl/err.h:124,
>> from md_crypt.c:28:
>> md_crypt.c:2084:29: error: 'SCT' undeclared (first use in this function)
>>sct_handle = sk_SCT_value(sct_list, i);
>> ^
>> md_crypt.c:2084:29: note: each undeclared identifier is reported only once 
>> for each function it appears in
>> md_crypt.c:2084:29: error: expected expression before ')' token
>>sct_handle = sk_SCT_value(sct_list, i);
>> ^
>> md_crypt.c:2087:21: warning: implicit declaration of function 
>> 'SCT_get_version' [-Wimplicit-function-declaration]
>> sct->version = SCT_get_version(sct_handle);
>> ^
>> md_crypt.c:2088:21: warning: implicit declaration of function 
>> 'SCT_get_timestamp' [-Wimplicit-function-declaration]
>> sct->timestamp = 
>> apr_time_from_msec(SCT_get_timestamp(sct_handle));
>> ^
>> md_crypt.c:2089:21: warning: implicit declaration of function 
>> 'SCT_get0_log_id' [-Wimplicit-function-declaration]
>> len = SCT_get0_log_id(sct_handle, (unsigned 
>> char**)&data);
>> ^
>> md_crypt.c:2091:21: warning: implicit declaration of function 
>> 'SCT_get_signature_nid' [-Wimplicit-function-declaration]
>> sct->signature_type_nid = 
>> SCT_get_signature_nid(sct_handle);
>> ^
>> md_crypt.c:2092:21: warning: implicit declaration of function 
>> 'SCT_get0_signature' [-Wimplicit-function-declaration]
>> len = SCT_get0_signature(sct_handle,  (unsigned 
>> char**)&data);
>> ^
>> make[4]: *** [md_crypt.slo] Error 1
>> make[4]: *** Waiting for unfinished jobs
>> make[4]: Leaving directory 
>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules/md'
>> make[3]: *** [shared-build-recursive] Error 1
>> make[3]: Leaving directory 
>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules/md'
>> make[2]: *** [shared-build-recursive] Error 1
>> make[2]: Leaving directory 
>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules'
>> make[1]: *** [shared-build-recursive] Error 1
>> make[1]: Leaving directory 
>> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61'
>> make: *** [all-recursive] Error 1
>>
>> I am not sure if we can do without these functions or the SCT structure and 
>> in the end mod_md is still experimental for 2.4.x.
>> But if we want to keep the code of mod_md as is in 2.4.x we probably should 
>> add checks in the autoconf stuff that prevents it
>> from being enabled on openssl < 1.1.1.
> 
> Ok, the code is from 2019, meaning we did not have that combination working 
> for a long time. I think checking the openssl version in configure seems the 
> best approach.

I guess r1918195 in 2.4.x is the culprit which changed defines in the code as I 
was able to compile 2.4.59 with Openssl 1.0.2 and
mod_md.

Regards

Rüdiger



Re: mod_md in 2.4.61 fails to compile with openssl < 1.1.1

2024-07-05 Thread Stefan Eissing via dev



> Am 05.07.2024 um 13:51 schrieb Ruediger Pluem :
> 
> I just noticed that mod_md in 2.4.61 fails to compile with openssl < 1.1.1. 
> Below is the output against openssl 1.0.2 on RedHat 7:
> 
> md_crypt.c: In function 'md_pkey_get_rsa_e64':
> md_crypt.c:982:5: warning: implicit declaration of function 
> 'EVP_PKEY_get0_RSA' [-Wimplicit-function-declaration]
> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
> ^
> md_crypt.c:982:22: warning: initialization makes pointer from integer without 
> a cast [enabled by default]
> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>  ^
> md_crypt.c: In function 'md_pkey_get_rsa_n64':
> md_crypt.c:1002:22: warning: initialization makes pointer from integer 
> without a cast [enabled by default]
> const RSA *rsa = EVP_PKEY_get0_RSA(pkey->pkey);
>  ^
> md_crypt.c: In function 'md_cert_get_ct_scts':
> md_crypt.c:2071:5: error: unknown type name 'SCT'
> SCT *sct_handle;
> ^
> In file included from /usr/include/openssl/crypto.h:129:0,
> from /usr/include/openssl/bio.h:69,
> from /usr/include/openssl/err.h:124,
> from md_crypt.c:28:
> md_crypt.c:2084:29: error: 'SCT' undeclared (first use in this function)
>sct_handle = sk_SCT_value(sct_list, i);
> ^
> md_crypt.c:2084:29: note: each undeclared identifier is reported only once 
> for each function it appears in
> md_crypt.c:2084:29: error: expected expression before ')' token
>sct_handle = sk_SCT_value(sct_list, i);
> ^
> md_crypt.c:2087:21: warning: implicit declaration of function 
> 'SCT_get_version' [-Wimplicit-function-declaration]
> sct->version = SCT_get_version(sct_handle);
> ^
> md_crypt.c:2088:21: warning: implicit declaration of function 
> 'SCT_get_timestamp' [-Wimplicit-function-declaration]
> sct->timestamp = 
> apr_time_from_msec(SCT_get_timestamp(sct_handle));
> ^
> md_crypt.c:2089:21: warning: implicit declaration of function 
> 'SCT_get0_log_id' [-Wimplicit-function-declaration]
> len = SCT_get0_log_id(sct_handle, (unsigned char**)&data);
> ^
> md_crypt.c:2091:21: warning: implicit declaration of function 
> 'SCT_get_signature_nid' [-Wimplicit-function-declaration]
> sct->signature_type_nid = 
> SCT_get_signature_nid(sct_handle);
> ^
> md_crypt.c:2092:21: warning: implicit declaration of function 
> 'SCT_get0_signature' [-Wimplicit-function-declaration]
> len = SCT_get0_signature(sct_handle,  (unsigned 
> char**)&data);
> ^
> make[4]: *** [md_crypt.slo] Error 1
> make[4]: *** Waiting for unfinished jobs
> make[4]: Leaving directory 
> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules/md'
> make[3]: *** [shared-build-recursive] Error 1
> make[3]: Leaving directory 
> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules/md'
> make[2]: *** [shared-build-recursive] Error 1
> make[2]: Leaving directory 
> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61/modules'
> make[1]: *** [shared-build-recursive] Error 1
> make[1]: Leaving directory 
> `/home/devil/rpmbuild/BUILD/WAO-apache-2.4.61/httpd-2.4.61'
> make: *** [all-recursive] Error 1
> 
> I am not sure if we can do without these functions or the SCT structure and 
> in the end mod_md is still experimental for 2.4.x.
> But if we want to keep the code of mod_md as is in 2.4.x we probably should 
> add checks in the autoconf stuff that prevents it
> from being enabled on openssl < 1.1.1.

Ok, the code is from 2019, meaning we did not have that combination working for 
a long time. I think checking the openssl version in configure seems the best 
approach.

Cheers,
Stefan

> 
> Regards
> 
> Rüdiger