Closed t8m closed 1 month ago
no-deprecated
has nothing to do with protocols. Excludes only API.
Too narrow task.
We did not discuss it. Discussed default to disable deprecated. Ban, rather than exclude from build.
Add the protocols to list disabled
, or deprecated_disablables
in Configure
. Nothing extra.
Warn user that you exclude the protocols. Suggest how to include.
Default option for compiler affects most users, especially who do not compile on their own. You may either defer this for several years, or warn user, and suggest to compile with enable-tls1_1
. Most would be unable to recompile.
Exclusion from build does justify reports of error, like "not supported". No need to change them.
Problem with default limit, like MinProtocol
: misleading report of error.
- Not specific to TLS 1, or deprecation. You may leave it till later.
If you do not introduce default limit, your are done.
There is nowhere said that we cannot change the definition of no-deprecated
in INSTALL.md to something like:
### no-deprecated
Don't build with support for deprecated features and APIs up until and including the version
given with `--api` (or the current version, if `--api` wasn't specified).
In my mind deprecation is a very different thing to excluding a feature from the build. We have lots of deprecated things which are still available in the build.
To me deprecation is simply a clear communication to the user that a feature is obsolete or not recommended - with a view that such deprecated features may eventually be removed. It is premature to completely remove TLSv1.0/1.1 from the build at this stage.
These protocols are already partially deprecated in the sense that you have take explicit steps to turn them on (they are not included in the default security level). But we could do better to signal to the user that they should not use them. I see no problem with setting a default MinProtocol at TLSv1.2.
The TLS 1.0/1.1 and DTLS 1.0 protocols are old and generally speaking should not be used for new deployments. There is a desire to default disallow the use of these protocol versions, but still allow their usage for older deployments as said deployments upgrade to newer versions of OpenSSL, when their presence is required. As such we want to run time deprecate the above protocols, but allow opt-in usage as required on specific sites
1) Deprecation/default disable-ment of protocol versions at run time 2) Re-enablement allowed via administrative intervention 3) Should prevent configured use by default, and provide warning when used at run time
Given that minimum protocol versions can already be specified in the configuration file I would propose that deprecation be handled by explicitly setting the min_proto_version to TLS1_2_VERSION in SSL_CTX_new() . While this is not "deprecation" in the build time sense that we nominally use it in openssl, it is functionally appropriate here, in that this creates a default inability to use < TLS_1_2_VERSION, but allows for administrative override by adding an ssl_conf section which specifies that lower versions can still be used. Programatically this also be done with a call to SSL_CTX_set_min_version.
@t8m nowhere said that we cannot change definition
This is crazy, and corrupt. You move goal posts during match. You again propose, what we did not discuss. Definitions are all we have. One moment we discuss one definition. Next you redefine. You propose to introduce 2nd place, where to list removal. There should only be 1. You should apologize for mistake. Instead, you perpetuate it with yet more cheating. - Just in order to appear good.
@mattcaswell deprecation is a very different thing to excluding
You are right. It must remain. It is user, who is to choose to remove. Not maker. You may only warn that you intend to remove. But OpenSSL does not provide warning. I suggested such new feature. Simplest way: document.
doc/internal/man7/deprecation.pod vaguely suggests that compiler could warn, when you use deprecated. But does not, because #define OPENSSL_SUPPRESS_DEPRECATED
.
Anyway, the warning is only during compilation, rather than run.
premature remove TLSv1.0/1.1
Then @nhorman set milestone 3.5.0 by mistake. What it should be?
security level
Bug. Implicit. Should abolish. Or at least default to 0.
no problem with setting a default
MinProtocol
Misleading reports of error are problem.
@nhorman protocol versions can already be specified in the configuration file propose that deprecation explicitly setting the
min_proto_version
toTLS1_2_VERSION
inSSL_CTX_new()
2 statements not related. Configuration is not the same as SSL_CTX_new()
.
openssl.cnf is explicit. But you do not propose to change it.
SSL_CTX_new()
is implicit. Not explicit.
I argued against implicit. You ignored.
OTC: We do not want to change the MinProtocol default setting. We will seek community input on making tls-1.0/1.1 dtls-1.0 compiled off by default in 4.0 version. We will post the question to oss-security ML.
@nhorman to post that question to the oss-security ML.
email sent
We've got conflicting feedback. @nhorman to summarize the existing feedback and create a GH discussion and a blog post (also announce it on openssl-users and GH Discussions Announcements).
Feedback summary: https://www.openwall.com/lists/oss-security/2024/08/06/1
It seems that we have a fairly split decision:
About 1/2 the responders are supportive of immediate deprecation and removal in the near future, as they have already migrated to TLS1.2 or later
The other half represent platforms that are old or otherwise un-upgradable (medical and military devices noted expressly here) that cannot move from TLS 1.1/1.0, would immediately enable any such deprecation, and would not be able to use openssl if the code were removed.
The remainder of the conversation revolved around workarounds for such devices, and how this disablement should be presented to users (build time warnings, run time log messages, etc).
Thought on a proposal: Based on the conversation, I think that a deprecation with a build time re-enablement is generally acceptable, even if a significant percentage of our users will just enable it again immediately.
As for complete removal, I would think that the next major (4.0) release is likely an ok target. That will allow us at least one more LTS release in the 3.x series which users can lean on for the next 5 years. At that point in time, the long tail of "can't upgrade" use cases should diminish to the point that they are likely to be near the end of their supported product lifetime, or can continue on via extended support contract arrangements.
Next Actions: Write up this summary in a blog post with the proposed action above, open a discussion to pull in additional community input, and plan for the action in our upcoming releases.
@t8m create a GH discussion
It is already: https://github.com/openssl/openssl/issues/15335 You ignore it. Created new one here. I reminded of the discussion. Now you try to create yet new one in order to forget these 2.
blog post
Yet 3rd discussion?..
You should invite people to 1 discussion, rather than isolate them in multitude of discussions.
@nhorman Feedback
You did not get much. Many of 30 replies are off topic, or speculation about things that do not use themselves.
You created 4th, separate discussion. In your announcement there you failed to link to discussion here, and: https://github.com/openssl/openssl/issues/15335
devices
Complainants forgot that they do not use OpenSSL to access them. They enable old TLS1 in browser. Browsers have their own SSL. They keep it. Do not intend to deprecate.
You forgot to mention a complaint that some distributors no longer update old systems. For them solution is trivial: deprecation would not affect them anyway. Unless other end of communication deprecates. But that is for the other end to decide.
removal
To deprecate means to disable. Not to remove. You should keep code of old TLS, and SSL forever. Even if you no longer update code for quality, or security. Just warn that update is neccessary, but no more. OpenSSL3 already removed SSL2. Can not enable. Do not remove SSL3, TLS1. May remove, if no longer works with new code; could update old code, but too lazy, because deprecated anyway.
You may deprecate, if you cease update, while update is due. Or to save memory. How much memory old code takes?
You could deprecate immediately, and suggest distributors compile 2 options: disabled, and enabled. If memory to save is too little, no need to deprecate.
I doubt update is due. So, old protocols may remain forever, even if no one uses. Someone may use any time.
Yet, I presume, everybody wants to save memory. Then you may decide by:
Problem for all users, except the latter: may encounter old TLS1 on other end any time, even after century. Most would prefer not to miss it. That is on unlimited network, like Internet. Only limited networks may guarantee absence of old.
Warning during run may annoy, and clog log. Best write once in documentation, and openssl.cnf. Prefer documentation in README. There the warning is easy to notice. Among various pages of man - not easy. Add also warning about deprecated SSL3. Do so immediately. Would serve as trial for warning about TLS1 in future.
List deprecation in:
no-{protocol}
, enable-{protocol}
. As section "Enable and Disable Features" suggests. Now all protocols are on same line.
Immediately separate disabled SSL3. Do not wait for deprecation of TLS1. You forgot to separate after deprecation.This is waiting on the blog approval.
blog post approved and posted, discussion open here: https://github.com/openssl/openssl/discussions/25427
Discussion open and in flight. Will collect and present results via https://github.com/openssl/private/issues/638
There is nowhere said that we cannot change the definition of
no-deprecated
in INSTALL.md to something like:### no-deprecated Don't build with support for deprecated features and APIs up until and including the version given with `--api` (or the current version, if `--api` wasn't specified).
I don't see a need to redefine this, if you understand "API" as not just being about function signatures, but also about (documented) behaviour. If we deprecate certain TLS versions, I would absolutely expect that with an OpenSSL build with no-deprecated
configured, functions that deal with TLS versions will return an error for the deprecated TLS versions. Because of this, it was perfectly valid to bring up no-deprecated
here.
Argh, didn't notice the discussion link. I'll have to repeat myself...
error deprecated
Fails to compile, if you refer to old function. Only new functions compile. Old program fails to run, because fails to find deprecated.
functions deal with TLS versions
None. https://github.com/openssl/project/issues/750#issuecomment-2219113004 no-deprecated
has nothing to do with protocols. Excludes only API.
@t8m arbitrarily redefined. But does not know what he proposes. Even if API dealt with protocols, you do not know which. There is no list.
valid bring
no-deprecated
here
What do you mean?
didn't notice discussion
No worry. Fell free to create 6th Discussion
. They do always https://github.com/openssl/project/issues/750#issuecomment-2287528943.
You must unify discussions that they split. Make 1.
Only when complete, may change code.
Remove from settings Project
, and any other possibility to split Discussion
.
The proposal should include documentation changes and how the libssl will behave in no-deprecated build according to the TLS version support.