Note: I'm deliberately ignoring the difference between regular DH and elliptic curve DH. Doesn't matter here.
Just poor phrasing.
"public server param" vs. "Ephemeral DH parameters" vs. "dhparam"
I think this is just poor phrasing/terminology. SSL Labs uses the definition as per RFC to basically tell you "Yo, i received the same pubkey twice! This shouldn't happen!"
SSL Labs uses the terms DH public server param (Ys)
and ECDH public server param
for this.
And this only makes sense if you know that they're referring to the RFC definition of what makes up the "parameters" and not to the openssl definition of what makes up "dhparams".
RFC definition
As per the TLS 1.2 RFC the params are defined like so:
struct {
opaque dh_p<1..2^16-1>;
opaque dh_g<1..2^16-1>;
opaque dh_Ys<1..2^16-1>;
} ServerDHParams; /* Ephemeral DH parameters */
So they DO INCLUDE the pubkey (dh_Ys
).
OpenSSL definition
But this conflicts with OpenSSL use of the term params which DOES NOT include the pubkey:
$ openssl dhparam 123 -noout -text
Generating DH parameters, 123 bit long safe prime, generator 2
This is going to take a long time
......+..++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*++*
DH Parameters: (123 bit)
prime:
04:f4:19:58:a6:2c:ad:1f:4f:b8:a9:b9:fd:3d:ea:
1b
generator: 2 (0x2)
Only the prime and the generator are including. No PubKey.
Further reading:
(Read part below only if you're bored.)
Long and rambling Sidenote
Sloppy openssl documentation.
The openssl documentation for ephemeral DH seems to have been contaminated from the openssl documentation for ephemeral RSA. eRSA is a thing of the past and no longer supported but it did the same thing that we now use ephemeral DH/ECDH for.
So what does that have to do with DH/ECDH? Well, the documentation for SSL_OP_SINGLE_DH_USE
reads like this:
SSL_OP_SINGLE_DH_USE
Always create a new key when using temporary/ephemeral DH parameters [...]
But wait a minute! According to the usual openssl terminology the KEY is the ephemeral part of the parameter/key combo. So why do they even use a term such as temporary/ephemeral DH parameters. -- Well, I think they just copied that from the documentation for the (now dead and buried) eRSA.
So while THIS made sense to say for eRSA:
/* Generating a key on the fly is very costly, so use what is there */
if (rsa_1024)
rsa_tmp=rsa_1024;
It does NOT make sense to copy that to the documentation for eDH:
/* Generating a key on the fly is very costly, so use what is there */
setup_dh_parameters_like_above();
This is copied verbatim from the old eRSA example. And in the DH context this does NOT make sense. What is costly is not so much to regenerate the DH-KEY but regenerate the DH-GROUP.
Edit 2017-07-23Sun: Removed wrong "you can share your modulus, no problem" statement.