Ideally, you should not use any of them. At all.
Here's why.
- RC4, MD5 and DES should not be used anymore. Old crypto. Toss it.
- CBC mode in AES sometimes suffers from implementation problems (cf. Padding Oracles). Thus, CBC should be avoided.
- SHA1 is considered insecure and is not be accepted as a certificate signing hash since January 2017 by major browsers.
So, if you absolutely have to stick with one of these ciphers, I agree with @otus here, and would recommend TLS_DHE_DSS_WITH_AES_128_CBC_SHA.
IF ever you have a chance to add other ciphers to your embedded platform, know this :
Symetric ciphers :
- AES and ChaCha20 are the best symmetric ciphers to use, as of the
beginning of the 21st century. The difference between them is, simply
put, being a block and stream cipher, therefore being different in
speed.
- AES often takes advantage of AES-NI, a hardware acceleration, found on many processors in current laptops and servers.
- ChaCha20 is to be preferred on mobile and embedded platforms, where
AES hardware acceleration is rare, because it is really faster.
- Poly1305 is de facto the best buddy for ChaCha20, so they go in pair.
- For AES, consider AEAD compatible modes, like GCM.
- Chose a hash algorithm like SHA2 or above (SHA384, SHA512,...). The higher, the more secure. But this is overkill, will take more time and is heavier in terms of size. So stick with SHA256.
Asymmetric ciphers (for key exchange) :
- Today's trend and best use is Diffie-Hellman. Even better, Ephemeral Elliptic-Curve Diffie-Hellman (ECDHE), because it is smaller, faster (you can generate 384bit parameters in a couple of milliseconds, corresponding to 7680 non-EC bits that would take hours to generate on your embedded device).
Certificate Signing :
Nobody uses DH.
RSA was good. To be avoided from now on. is still good.
It's even really faster for validation than DSA - take a look with
openssl speed
(up to you to determine whether this matters for your use).
Best use : ECDSA. DSA is new, and coupled with Elliptic curves, it is smaller and really faster than RSA - take another look at openssl speed
. Considered more secure. Just a shame that Edwards curves are not supported in OpenSSL as for now.
(Sorry if I missed details or am not being clear, wrote this on lunch break.)
EDIT : Added clarification on choice between ECDSA and RSA. Thanks @Dreadlockyx and @otus for having me have a second look !