The TLS 1.1 (RFC 4346), the section for Server Key Exchange Message (7.4.3) says
It is not legal to send the server key exchange message for the
following key exchange methods:
RSA
DH_DSS
DH_RSA
But, below in the same section for structure of the message, it gives the structure as follows:
struct {
select (KeyExchangeAlgorithm) {
case diffie_hellman:
ServerDHParams params;
Signature signed_params;
case rsa:
ServerRSAParams params;
Signature signed_params;
};
} ServerKeyExchange;
In which condition will the ServerRSAParams be sent? Why is it needed? In the TLS 1.2 (RFC 5246) specification, I find that the ServerKeyExchange structure doesn't indicate any parameters to be sent for RSA. Snippet from RFC 5246 below:
struct {
select (KeyExchangeAlgorithm) {
case dh_anon:
ServerDHParams params;
case dhe_dss:
case dhe_rsa:
ServerDHParams params;
digitally-signed struct {
opaque client_random[32];
opaque server_random[32];
ServerDHParams params;
} signed_params;
case rsa:
case dh_dss:
case dh_rsa:
struct {} ;
/* message is omitted for rsa, dh_dss, and dh_rsa */
/* may be extended, e.g., for ECDH -- see [TLSECC] */
};
} ServerKeyExchange;