{"action":"created","comment":{"url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/comments/32978100","id":32978100,"diff_hunk":"@@ -0,0 +1,94 @@\n+---\n+title: IRCv3.3 Strict Transport Security\n+layout: spec\n+copyrights:\n+  -\n+    name: \"Attila Molnar\"\n+    period: \"2015\"\n+    email: \"attilamolnar@hush.com\"\n+---\n+\n+## Description\n+\n+Strict Transport Security (STS) is a mechanism which allows servers to\n+communicate that complying clients should only connect to them over a secure\n+connection.\n+\n+The policy is communicated to the client via the `sts` capability and should\n+be processed by the client at capability negotiation time.\n+\n+The value of the capability specifies the duration during which the client\n+MUST only connect to the server securely (using TLS, aka. SSL), and the port\n+number to use for it.\n+\n+## Details\n+\n+The capability value, which MUST always be present, is a comma (`,`) separated\n+list of tokens. Each token is a key which may have a value attached. If there\n+is a value attached, the value is separated from the key by a `=`. That is,\n+`<key>[=<value>][<key2>[=<value2>][<keyN>[=<valueN>]]]`. Keys specified in\n+this document MUST only occur at most once.\n+\n+See [capability negotiation 3.2](capability-negotiation-3.2.html) for more\n+information about capabilities with values.\n+\n+When the client sees the `sts` capability advertised over a non-secure\n+connection, it MUST first establish a secure connection and confirm that the\n+`sts` capability is still present.\n+\n+Once the client has confirmed that the `sts` capability is indeed offered over\n+a secure connection, it then MUST only attempt secure connections to the\n+server from now on. It MUST refuse to connect if a secure connection cannot\n+be established with the server for any reason.\n+\n+If the client cannot establish a secure connection for any reason, it MAY\n+continue using the insecure connection.","path":"core/sts-3.3.md","position":45,"original_position":45,"commit_id":"1a61f92b0247f1ede7f16feb874426f469d016f8","original_commit_id":"1a61f92b0247f1ede7f16feb874426f469d016f8","user":{"login":"attilamolnar","id":1634220,"avatar_url":"https://avatars.githubusercontent.com/u/1634220?v=3","gravatar_id":"","url":"https://api.github.com/users/attilamolnar","html_url":"https://github.com/attilamolnar","followers_url":"https://api.github.com/users/attilamolnar/followers","following_url":"https://api.github.com/users/attilamolnar/following{/other_user}","gists_url":"https://api.github.com/users/attilamolnar/gists{/gist_id}","starred_url":"https://api.github.com/users/attilamolnar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attilamolnar/subscriptions","organizations_url":"https://api.github.com/users/attilamolnar/orgs","repos_url":"https://api.github.com/users/attilamolnar/repos","events_url":"https://api.github.com/users/attilamolnar/events{/privacy}","received_events_url":"https://api.github.com/users/attilamolnar/received_events","type":"User","site_admin":false},"body":"Replacement paragraph:\r\n\r\n> However, if the client fails to confirm whether the `sts` capability is legitimate (i.e. it has not managed to connect securely and get the advertisement over a secure connection for any reason), it MAY continue using non-secure connections.\r\n\r\nDo you think this is OK?","created_at":"2015-06-22T20:17:01Z","updated_at":"2015-06-22T20:17:01Z","html_url":"https://github.com/ircv3/ircv3-specifications/pull/155#discussion_r32978100","pull_request_url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155","_links":{"self":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/comments/32978100"},"html":{"href":"https://github.com/ircv3/ircv3-specifications/pull/155#discussion_r32978100"},"pull_request":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155"}}},"pull_request":{"url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155","id":38240751,"html_url":"https://github.com/ircv3/ircv3-specifications/pull/155","diff_url":"https://github.com/ircv3/ircv3-specifications/pull/155.diff","patch_url":"https://github.com/ircv3/ircv3-specifications/pull/155.patch","issue_url":"https://api.github.com/repos/ircv3/ircv3-specifications/issues/155","number":155,"state":"open","locked":false,"title":"Add Strict Transport Security specification","user":{"login":"attilamolnar","id":1634220,"avatar_url":"https://avatars.githubusercontent.com/u/1634220?v=3","gravatar_id":"","url":"https://api.github.com/users/attilamolnar","html_url":"https://github.com/attilamolnar","followers_url":"https://api.github.com/users/attilamolnar/followers","following_url":"https://api.github.com/users/attilamolnar/following{/other_user}","gists_url":"https://api.github.com/users/attilamolnar/gists{/gist_id}","starred_url":"https://api.github.com/users/attilamolnar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attilamolnar/subscriptions","organizations_url":"https://api.github.com/users/attilamolnar/orgs","repos_url":"https://api.github.com/users/attilamolnar/repos","events_url":"https://api.github.com/users/attilamolnar/events{/privacy}","received_events_url":"https://api.github.com/users/attilamolnar/received_events","type":"User","site_admin":false},"body":"Added as core for 3.3, the idea is that this helps migrating from insecure connections to secure ones and paves the way for mandating secure connections for new features (if that ever happens).\r\n\r\nThe spec is trying to solve two problems at once, one is redirecting clients to a TLS port and the enforcement of it for all future connections. This is different to HSTS because browsers can be redirected to a secure site while there is no standardized way to do the equivalent for IRC clients.","created_at":"2015-06-22T15:00:41Z","updated_at":"2015-06-22T20:17:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a6030876e19d87d1e575655099fe2d6984d1b56e","assignee":null,"milestone":{"url":"https://api.github.com/repos/ircv3/ircv3-specifications/milestones/2","html_url":"https://github.com/ircv3/ircv3-specifications/milestones/IRCv3.3","labels_url":"https://api.github.com/repos/ircv3/ircv3-specifications/milestones/2/labels","id":591504,"number":2,"title":"IRCv3.3","description":null,"creator":{"login":"attilamolnar","id":1634220,"avatar_url":"https://avatars.githubusercontent.com/u/1634220?v=3","gravatar_id":"","url":"https://api.github.com/users/attilamolnar","html_url":"https://github.com/attilamolnar","followers_url":"https://api.github.com/users/attilamolnar/followers","following_url":"https://api.github.com/users/attilamolnar/following{/other_user}","gists_url":"https://api.github.com/users/attilamolnar/gists{/gist_id}","starred_url":"https://api.github.com/users/attilamolnar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attilamolnar/subscriptions","organizations_url":"https://api.github.com/users/attilamolnar/orgs","repos_url":"https://api.github.com/users/attilamolnar/repos","events_url":"https://api.github.com/users/attilamolnar/events{/privacy}","received_events_url":"https://api.github.com/users/attilamolnar/received_events","type":"User","site_admin":false},"open_issues":5,"closed_issues":1,"state":"open","created_at":"2014-03-08T20:18:22Z","updated_at":"2015-06-22T15:00:41Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155/commits","review_comments_url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155/comments","review_comment_url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ircv3/ircv3-specifications/issues/155/comments","statuses_url":"https://api.github.com/repos/ircv3/ircv3-specifications/statuses/1a61f92b0247f1ede7f16feb874426f469d016f8","head":{"label":"attilamolnar:sts","ref":"sts","sha":"1a61f92b0247f1ede7f16feb874426f469d016f8","user":{"login":"attilamolnar","id":1634220,"avatar_url":"https://avatars.githubusercontent.com/u/1634220?v=3","gravatar_id":"","url":"https://api.github.com/users/attilamolnar","html_url":"https://github.com/attilamolnar","followers_url":"https://api.github.com/users/attilamolnar/followers","following_url":"https://api.github.com/users/attilamolnar/following{/other_user}","gists_url":"https://api.github.com/users/attilamolnar/gists{/gist_id}","starred_url":"https://api.github.com/users/attilamolnar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attilamolnar/subscriptions","organizations_url":"https://api.github.com/users/attilamolnar/orgs","repos_url":"https://api.github.com/users/attilamolnar/repos","events_url":"https://api.github.com/users/attilamolnar/events{/privacy}","received_events_url":"https://api.github.com/users/attilamolnar/received_events","type":"User","site_admin":false},"repo":{"id":9896119,"name":"ircv3-specifications","full_name":"attilamolnar/ircv3-specifications","owner":{"login":"attilamolnar","id":1634220,"avatar_url":"https://avatars.githubusercontent.com/u/1634220?v=3","gravatar_id":"","url":"https://api.github.com/users/attilamolnar","html_url":"https://github.com/attilamolnar","followers_url":"https://api.github.com/users/attilamolnar/followers","following_url":"https://api.github.com/users/attilamolnar/following{/other_user}","gists_url":"https://api.github.com/users/attilamolnar/gists{/gist_id}","starred_url":"https://api.github.com/users/attilamolnar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/attilamolnar/subscriptions","organizations_url":"https://api.github.com/users/attilamolnar/orgs","repos_url":"https://api.github.com/users/attilamolnar/repos","events_url":"https://api.github.com/users/attilamolnar/events{/privacy}","received_events_url":"https://api.github.com/users/attilamolnar/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/attilamolnar/ircv3-specifications","description":"","fork":true,"url":"https://api.github.com/repos/attilamolnar/ircv3-specifications","forks_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/forks","keys_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/keys{/key_id}","collaborators_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/teams","hooks_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/hooks","issue_events_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/issues/events{/number}","events_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/events","assignees_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/assignees{/user}","branches_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/branches{/branch}","tags_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/tags","blobs_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/git/refs{/sha}","trees_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/git/trees{/sha}","statuses_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/statuses/{sha}","languages_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/languages","stargazers_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/stargazers","contributors_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/contributors","subscribers_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/subscribers","subscription_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/subscription","commits_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/commits{/sha}","git_commits_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/git/commits{/sha}","comments_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/comments{/number}","issue_comment_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/issues/comments{/number}","contents_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/contents/{+path}","compare_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/compare/{base}...{head}","merges_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/merges","archive_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/downloads","issues_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/issues{/number}","pulls_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/pulls{/number}","milestones_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/milestones{/number}","notifications_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/labels{/name}","releases_url":"https://api.github.com/repos/attilamolnar/ircv3-specifications/releases{/id}","created_at":"2013-05-06T20:26:21Z","updated_at":"2015-06-22T14:11:13Z","pushed_at":"2015-06-22T15:43:42Z","git_url":"git://github.com/attilamolnar/ircv3-specifications.git","ssh_url":"git@github.com:attilamolnar/ircv3-specifications.git","clone_url":"https://github.com/attilamolnar/ircv3-specifications.git","svn_url":"https://github.com/attilamolnar/ircv3-specifications","homepage":null,"size":1124,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ircv3:master","ref":"master","sha":"1b4982dfc4176c165f7b3154ef98e1b54755fbf1","user":{"login":"ircv3","id":6295495,"avatar_url":"https://avatars.githubusercontent.com/u/6295495?v=3","gravatar_id":"","url":"https://api.github.com/users/ircv3","html_url":"https://github.com/ircv3","followers_url":"https://api.github.com/users/ircv3/followers","following_url":"https://api.github.com/users/ircv3/following{/other_user}","gists_url":"https://api.github.com/users/ircv3/gists{/gist_id}","starred_url":"https://api.github.com/users/ircv3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ircv3/subscriptions","organizations_url":"https://api.github.com/users/ircv3/orgs","repos_url":"https://api.github.com/users/ircv3/repos","events_url":"https://api.github.com/users/ircv3/events{/privacy}","received_events_url":"https://api.github.com/users/ircv3/received_events","type":"Organization","site_admin":false},"repo":{"id":4154671,"name":"ircv3-specifications","full_name":"ircv3/ircv3-specifications","owner":{"login":"ircv3","id":6295495,"avatar_url":"https://avatars.githubusercontent.com/u/6295495?v=3","gravatar_id":"","url":"https://api.github.com/users/ircv3","html_url":"https://github.com/ircv3","followers_url":"https://api.github.com/users/ircv3/followers","following_url":"https://api.github.com/users/ircv3/following{/other_user}","gists_url":"https://api.github.com/users/ircv3/gists{/gist_id}","starred_url":"https://api.github.com/users/ircv3/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ircv3/subscriptions","organizations_url":"https://api.github.com/users/ircv3/orgs","repos_url":"https://api.github.com/users/ircv3/repos","events_url":"https://api.github.com/users/ircv3/events{/privacy}","received_events_url":"https://api.github.com/users/ircv3/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ircv3/ircv3-specifications","description":"IRCv3 specifications","fork":false,"url":"https://api.github.com/repos/ircv3/ircv3-specifications","forks_url":"https://api.github.com/repos/ircv3/ircv3-specifications/forks","keys_url":"https://api.github.com/repos/ircv3/ircv3-specifications/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ircv3/ircv3-specifications/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ircv3/ircv3-specifications/teams","hooks_url":"https://api.github.com/repos/ircv3/ircv3-specifications/hooks","issue_events_url":"https://api.github.com/repos/ircv3/ircv3-specifications/issues/events{/number}","events_url":"https://api.github.com/repos/ircv3/ircv3-specifications/events","assignees_url":"https://api.github.com/repos/ircv3/ircv3-specifications/assignees{/user}","branches_url":"https://api.github.com/repos/ircv3/ircv3-specifications/branches{/branch}","tags_url":"https://api.github.com/repos/ircv3/ircv3-specifications/tags","blobs_url":"https://api.github.com/repos/ircv3/ircv3-specifications/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ircv3/ircv3-specifications/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ircv3/ircv3-specifications/git/refs{/sha}","trees_url":"https://api.github.com/repos/ircv3/ircv3-specifications/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ircv3/ircv3-specifications/statuses/{sha}","languages_url":"https://api.github.com/repos/ircv3/ircv3-specifications/languages","stargazers_url":"https://api.github.com/repos/ircv3/ircv3-specifications/stargazers","contributors_url":"https://api.github.com/repos/ircv3/ircv3-specifications/contributors","subscribers_url":"https://api.github.com/repos/ircv3/ircv3-specifications/subscribers","subscription_url":"https://api.github.com/repos/ircv3/ircv3-specifications/subscription","commits_url":"https://api.github.com/repos/ircv3/ircv3-specifications/commits{/sha}","git_commits_url":"https://api.github.com/repos/ircv3/ircv3-specifications/git/commits{/sha}","comments_url":"https://api.github.com/repos/ircv3/ircv3-specifications/comments{/number}","issue_comment_url":"https://api.github.com/repos/ircv3/ircv3-specifications/issues/comments{/number}","contents_url":"https://api.github.com/repos/ircv3/ircv3-specifications/contents/{+path}","compare_url":"https://api.github.com/repos/ircv3/ircv3-specifications/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ircv3/ircv3-specifications/merges","archive_url":"https://api.github.com/repos/ircv3/ircv3-specifications/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ircv3/ircv3-specifications/downloads","issues_url":"https://api.github.com/repos/ircv3/ircv3-specifications/issues{/number}","pulls_url":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls{/number}","milestones_url":"https://api.github.com/repos/ircv3/ircv3-specifications/milestones{/number}","notifications_url":"https://api.github.com/repos/ircv3/ircv3-specifications/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ircv3/ircv3-specifications/labels{/name}","releases_url":"https://api.github.com/repos/ircv3/ircv3-specifications/releases{/id}","created_at":"2012-04-27T03:25:11Z","updated_at":"2015-06-22T15:50:40Z","pushed_at":"2015-06-22T15:43:44Z","git_url":"git://github.com/ircv3/ircv3-specifications.git","ssh_url":"git@github.com:ircv3/ircv3-specifications.git","clone_url":"https://github.com/ircv3/ircv3-specifications.git","svn_url":"https://github.com/ircv3/ircv3-specifications","homepage":"http://ircv3.org/","size":1142,"stargazers_count":176,"watchers_count":176,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":31,"mirror_url":null,"open_issues_count":32,"forks":31,"open_issues":32,"watchers":176,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155"},"html":{"href":"https://github.com/ircv3/ircv3-specifications/pull/155"},"issue":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/issues/155"},"comments":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/issues/155/comments"},"review_comments":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155/comments"},"review_comment":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/pulls/155/commits"},"statuses":{"href":"https://api.github.com/repos/ircv3/ircv3-specifications/statuses/1a61f92b0247f1ede7f16feb874426f469d016f8"}}}}