Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stop setting Expect-CT by default #310

Closed
EvanHahn opened this issue Apr 28, 2021 · 8 comments
Closed

Stop setting Expect-CT by default #310

EvanHahn opened this issue Apr 28, 2021 · 8 comments
Milestone

Comments

@EvanHahn
Copy link
Member

We may want to remove support for the Expect-CT header in Helmet 5.

From MDN:

The Expect-CT will likely become obsolete in June 2021. Since May 2018 new certificates are expected to support SCTs by default. Certificates before March 2018 were allowed to have a lifetime of 39 months, those will all be expired in June 2021.

The OWASP Secure Headers Project says something similar.

First, we should make sure that it's okay to remove Expect-CT. Will removing it cause any harm? If so, we should abandon this work and continue to maintain it.

If we can remove it, we should:

  1. Remove the Expect-CT middleware (git rm -r middlewares/expect-ct)
  2. Remove the middleware-specific tests (git rm test/expect-ct.test.ts)
  3. Remove the top-level tests (see test/index.ts)
  4. Remove it from the top-level middleware (see index.ts)
  5. Remove it from the published allowlist (see .npmignore)
  6. Update the changelog and documentation

After this is done, git grep -i expect-ct and git grep -i expectct should only return results in the changelog. And this change should be made against the v5.x branch, not main.

But again, we shouldn't do any of this if Expect-CT shouldn't be removed.

@louy2
Copy link
Contributor

louy2 commented Jul 13, 2021

Maybe it is time to deprecate it first, set a timeline for removal, and display a warning for everyone who is using it and point them here to give feedback? Hopefully at least some users would see the warning. Or since it is a major version bump, just break people's CI to get them here.

@EvanHahn
Copy link
Member Author

I agree 100%. However, I want to make sure it's okay to delete. Based on my very quick research, it seems like the above links haven't been updated to say something like, "this is now deprecated".

I'm away from reliable internet this week, so if someone could find definitive sources that claim we can drop this header, I'd appreciate it! Once we've decided we can remove it, we'll start logging deprecation warnings and so on.

@louy2
Copy link
Contributor

louy2 commented Oct 5, 2021

To be honest I don't think even a "definitive" deprecation means much in terms of HTTP headers. After all HTML5 was a reimagining of the HTML standard which picked back up plenty of what had been deprecated by HTML4. The only way to be sure about if it's okay to delete seems to be collecting usage data, but telemetry is kind of frowned upon. Might as well just keep it for posterity if there is no issue with it?

@EvanHahn
Copy link
Member Author

EvanHahn commented Oct 5, 2021

The difference, I think, is that Expect-CT tells browsers to expect certificate transparency. If modern browsers expect it by default, then the header is a waste (though not harmful).

According to MDN, it looks like Chrome and Safari require it but Firefox does not, so the header would still be useful for Firefox. But that info may be out of date.

@EvanHahn
Copy link
Member Author

I'm planning the next major version of Helmet, version 5. I'm trying to decide what to do with Expect-CT in that version. I see three options:

  1. Keep things as is: set the Expect-CT header by default and allow users to set it.
  2. Disable the Expect-CT header by default and allow users to explicitly enable it.
  3. Completely remove Expect-CT from the codebase.

There still seems to be some benefit to the header and I want to minimize disruption, so I think I'm going to go with the first option (keeping things as is). We can re-evaluate this in Helmet version 6.

If anyone disagrees with that plan, let me know!

@EvanHahn EvanHahn removed this from the v5.0.0 milestone Nov 17, 2021
@EvanHahn EvanHahn added this to the v6.0.0 milestone Dec 5, 2021
@EvanHahn
Copy link
Member Author

@EvanHahn
Copy link
Member Author

My plan is:

  1. Stop setting the header by default in Helmet v6. It will still be available, just not on by default.
  2. In Helmet v7, fully remove support.

@EvanHahn EvanHahn modified the milestone: v6.0.0 Aug 13, 2022
@EvanHahn EvanHahn changed the title Remove Expect-CT? Stop setting Expect-CT by default Aug 13, 2022
EvanHahn added a commit that referenced this issue Aug 13, 2022
@EvanHahn
Copy link
Member Author

This is done in the v6 branch. See commit 6ad1f0f, and #370 to follow along with v6's development.

EvanHahn added a commit that referenced this issue Aug 26, 2022
NeilLuptonMoJ added a commit to ministryofjustice/hmpps-interventions-ui that referenced this issue Aug 30, 2022
remove `expect-ct` - helmetjs/helmet#310
remove `block-all-mixed-content` - helmetjs/helmet@3874c6b
markmoj pushed a commit to ministryofjustice/hmpps-interventions-ui that referenced this issue Sep 1, 2022
remove `expect-ct` - helmetjs/helmet#310
remove `block-all-mixed-content` - helmetjs/helmet@3874c6b
alex9smith added a commit to govuk-one-login/di-account-management-frontend that referenced this issue Jul 13, 2023
alex9smith added a commit to govuk-one-login/di-account-management-frontend that referenced this issue Jul 13, 2023
The `Expect-CT` header is now deprecated (see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expect-CT)
and helmet dropped support for it as of helmet v7 (helmetjs/helmet#310)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

2 participants