Description
Issues like this are alive for more than 5 years: #14741
Intended effect of linking to a system openssl was supposedly that we get updated openssl sooner. This is clearly not happening because we lack the c# api that would go along with the openssl anyway.
The goal should be to give power to users.
- let me switch out the openssl version that dotnet links to
- dotnet has to give me c# apis that correspond to new features in the newer openssl version
Needed for that:
-
Report which openssl symbols are being discovered by dotnet and if there are any problems or compatability changes then report that loudly.
-
Expose the underlying OpenSSL apis under the same naming.
As I've indicated in this issue: API call order matters but it shouldnt aspnetcore#11833
Names like "CipherAlgorithmType.Rc4" dont really mean anything by itself in OpenSSL, correct me if I'm wrong here but in OpenSSL terms to specify "Rc4" does not let me know which exact cypher would be picked because the real cyphers are long strings like: "TLS_RSA_WITH_RC4_128_MD5"
So now I'm supposed to somehow figure out what Rc4 actually means in terms of the real underlying implementation. This is just extra work for me as an enduser, if I were using C then I could directly link to openssl and everything would be clear because I call SSL_CTX_set_cipher_list() and there wouldnt be any doubt about what it does. It's not clear to me why c# doesnt just do that also. I dont see any harm in making c# use openssl terms even if it eventually switches the underlying ssl library away from openssl. It's just an api interface.
And to strengthen my argument, Golang does exactly that:
https://stackoverflow.com/questions/31226131/how-to-set-tls-cipher-for-go-server
It simply lets you specify the cipher suites directly by their actual names. I don't see any possible argument why this should be more complicated than that.