Title: Reloading page bypasses TLS client authentication · Issue #35317 · nodejs/node · GitHub
Open Graph Title: Reloading page bypasses TLS client authentication · Issue #35317 · nodejs/node
X Title: Reloading page bypasses TLS client authentication · Issue #35317 · nodejs/node
Description: Version: v12.18.3 Platform: Linux 5.8.8-100.fc31.x86_64 #1 SMP Wed Sep 9 20:29:23 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux Subsystem: What steps will reproduce the bug? Obtain (or create) a CA certificate, a server certificate, and a serv...
Open Graph Description: Version: v12.18.3 Platform: Linux 5.8.8-100.fc31.x86_64 #1 SMP Wed Sep 9 20:29:23 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux Subsystem: What steps will reproduce the bug? Obtain (or create) a CA certi...
X Description: Version: v12.18.3 Platform: Linux 5.8.8-100.fc31.x86_64 #1 SMP Wed Sep 9 20:29:23 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux Subsystem: What steps will reproduce the bug? Obtain (or create) a CA certi...
Opengraph URL: https://github.com/nodejs/node/issues/35317
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Reloading page bypasses TLS client authentication","articleBody":"\u003c!--\r\nThank you for reporting an issue.\r\n\r\nThis issue tracker is for bugs and issues found within Node.js core.\r\nIf you require more general support please file an issue on our help\r\nrepo. https://github.com/nodejs/help\r\n\r\n\r\nPlease fill in as much of the template below as you're able.\r\n\r\nVersion: output of `node -v`\r\nPlatform: output of `uname -a` (UNIX), or version and 32 or 64-bit (Windows)\r\nSubsystem: if known, please specify affected core module name\r\n--\u003e\r\n\r\n* **Version**: v12.18.3\r\n* **Platform**: Linux 5.8.8-100.fc31.x86_64 #1 SMP Wed Sep 9 20:29:23 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux\r\n* **Subsystem**: \r\n\r\n### What steps will reproduce the bug?\r\n- Obtain (or create) a CA certificate, a server certificate, and a server key supplied by said CA.\r\n- Compile (with typescript) and run the following code:\r\n```\r\nimport fs from 'fs';\r\nimport path from 'path';\r\nimport https from 'https';\r\nimport tls from 'tls';\r\nimport express from 'express';\r\n\r\n/* Alias environment variables */\r\nconst port = process.env.PORT || 443;\r\n\r\nconst httpsOptions = {\r\n key: fs.readFileSync(path.join('certs', 'server.key')),\r\n cert: fs.readFileSync(path.join('certs', 'server.crt')),\r\n ca: fs.readFileSync(path.join('certs', 'ca.crt')),\r\n requestCert: true,\r\n rejectUnauthorized: false /* This is necessary to accept self-signed certificates, we will perform the authentication ourselves */\r\n};\r\n\r\n/* Create Express app */\r\nconst expressApp = express();\r\nconst expressServer = https.createServer(httpsOptions, expressApp);\r\n\r\nexpressApp.use((req,res,next) =\u003e {\r\n console.log((req.socket as tls.TLSSocket).authorized ? 'true' : 'false');\r\n if (!(req.socket as tls.TLSSocket).authorized) {\r\n return res.status(401).send('Unauthorized');\r\n }\r\n next();\r\n});\r\n\r\nexpressServer.listen(port, () =\u003e {\r\n console.log(`Server listening on port ${port}`);\r\n});\r\n```\r\n- Open Firefox (version 80) and go to https://localhost. You should have your connection rejected (output is 'false').\r\n- Reload the page. Your connection is now accepted (output is 'true').\r\n- This curiously doesn't happen on Chromium.\r\n\r\n\u003c!--\r\nEnter details about your bug, preferably a simple code snippet that can be\r\nrun using `node` directly without installing third-party dependencies.\r\n--\u003e\r\n\r\n### How often does it reproduce? Is there a required condition?\r\n- Always reproducible. Chromium seems to not trigger the issue.\r\n\r\n### What is the expected behavior?\r\n- Connection should always be rejected\r\n\r\n\u003c!--\r\nIf possible please provide textual output instead of screenshots.\r\n--\u003e\r\n\r\n### What do you see instead?\r\n- Connection is accepted after page reload\r\n\r\n\u003c!--\r\nIf possible please provide textual output instead of screenshots.\r\n--\u003e\r\n\r\n### Additional information\r\n- According to documentation at https://nodejs.org/api/tls.html#tls_tlssocket_authorized the `(req.socket as tls.TLSSocket).authorized` flag should always be false if the client certificate doesn't match the server CA. In this case it becomes true after a page reload from Firefox for unknown reasons.\r\n- This issue is described also in a stack overflow entry: https://stackoverflow.com/questions/60367338/result-of-req-socket-authorized-is-not-correct-using-nodejs-https-and-express\r\n- I'm guessing it might be due to some TLS connection reuse logic.\r\n\r\n\u003c!--\r\nTell us anything else you think we should know.\r\n--\u003e\r\n","author":{"url":"https://github.com/maikeriva","@type":"Person","name":"maikeriva"},"datePublished":"2020-09-23T15:05:29.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":13},"url":"https://github.com/35317/node/issues/35317"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:1dc78963-5ff9-65b7-7df5-350a201fb00b |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | DC82:124332:932625:CB7039:6A6249A1 |
| html-safe-nonce | 49d71b11ca06f3986b2176ecef69caa103766f8fbf7242a16799eb838ad87489 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEQzgyOjEyNDMzMjo5MzI2MjU6Q0I3MDM5OjZBNjI0OUExIiwidmlzaXRvcl9pZCI6IjMwNTEwNTYzMjI2MDE2OTk3NDUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 580fe9ecbe54a8cfd6aaec38cb6272ac5952bc04c5aea763a3e0c65c9dc0f7ad |
| hovercard-subject-tag | issue:707448399 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/nodejs/node/35317/issue_layout |
| twitter:image | https://opengraph.githubassets.com/537afb2ee1b0ce3243dd89fc18c8add67611ffce967a8565feaded0de45664c3/nodejs/node/issues/35317 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/537afb2ee1b0ce3243dd89fc18c8add67611ffce967a8565feaded0de45664c3/nodejs/node/issues/35317 |
| og:image:alt | Version: v12.18.3 Platform: Linux 5.8.8-100.fc31.x86_64 #1 SMP Wed Sep 9 20:29:23 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux Subsystem: What steps will reproduce the bug? Obtain (or create) a CA certi... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | maikeriva |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5d6ba65d73ecc4e3394fe318d2b2f98e6f8eed4878b5421b938e20d30bde267b |
| turbo-cache-control | no-preview |
| go-import | github.com/nodejs/node git https://github.com/nodejs/node.git |
| octolytics-dimension-user_id | 9950313 |
| octolytics-dimension-user_login | nodejs |
| octolytics-dimension-repository_id | 27193779 |
| octolytics-dimension-repository_nwo | nodejs/node |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 27193779 |
| octolytics-dimension-repository_network_root_nwo | nodejs/node |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 2dadc56fd5989b76a8ae7304e3aa56d0b485e5dc |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width