{"id":20045318,"url":"https://github.com/sergeyfrolov/httpsproxy","last_synced_at":"2025-05-05T09:30:39.586Z","repository":{"id":94761952,"uuid":"143775051","full_name":"sergeyfrolov/httpsproxy","owner":"sergeyfrolov","description":"HTTPS-based Pluggable Transport for Tor","archived":false,"fork":false,"pushed_at":"2018-08-06T20:05:55.000Z","size":19,"stargazers_count":11,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-01T16:23:07.137Z","etag":null,"topics":["censorship-circumvention","https","https-proxy","internet-freedom","pluggable-transports","tor"],"latest_commit_sha":null,"homepage":"https://gitweb.torproject.org/pluggable-transports/httpsproxy.git/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sergeyfrolov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-06T19:43:18.000Z","updated_at":"2024-06-19T12:28:34.236Z","dependencies_parsed_at":"2023-03-06T08:01:07.986Z","dependency_job_id":null,"html_url":"https://github.com/sergeyfrolov/httpsproxy","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergeyfrolov%2Fhttpsproxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergeyfrolov%2Fhttpsproxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergeyfrolov%2Fhttpsproxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergeyfrolov%2Fhttpsproxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sergeyfrolov","download_url":"https://codeload.github.com/sergeyfrolov/httpsproxy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252471297,"owners_count":21753147,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["censorship-circumvention","https","https-proxy","internet-freedom","pluggable-transports","tor"],"created_at":"2024-11-13T11:06:29.277Z","updated_at":"2025-05-05T09:30:39.184Z","avatar_url":"https://github.com/sergeyfrolov.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [httpsproxy](https://trac.torproject.org/projects/tor/ticket/26923)\n\n## Spin up a full Tor bridge\nThis instruction explains how to install and start following components:\n* Caddy Web Server\n* Pluggable Transport\n* Tor daemon\n\n```bash\nsudo apt install tor\n\n# build server from source code\ngit clone https://git.torproject.org/pluggable-transports/httpsproxy.git\ncd httpsproxy/server\ngo get\ngo build\nsudo cp server /var/lib/tor/httpsproxy\n\n# allow binding to ports 80 and 443\nsudo /sbin/setcap 'cap_net_bind_service=+ep' /var/lib/tor/httpsproxy\nsudo sed -i -e 's/NoNewPrivileges=yes/NoNewPrivileges=no/g' /lib/systemd/system/tor@default.service\nsudo sed -i -e 's/NoNewPrivileges=yes/NoNewPrivileges=no/g' /lib/systemd/system/tor@.service\nsudo systemctl daemon-reload\n\n# don't forget to set correct ContactInfo\nsudo cat \u003c\u003cEOT \u003e\u003e /etc/tor/torrc\n  RunAsDaemon 1\n  BridgeRelay 1\n  ExitRelay 0\n\n  PublishServerDescriptor 0 # 1 for public bridge\n\n  ORPort 9001\n  ExtORPort auto\n\n  ServerTransportPlugin httpsproxy exec /var/lib/tor/httpsproxy -servername yourdomain.com -agree -email youremail@gmail.com\n  Address 1.2.3.4 # might be required per https://trac.torproject.org/projects/tor/ticket/12020\n  \n  ContactInfo Dr Stephen Falken steph@gtnw.org\n  Nickname joshua\nEOT\n\nsudo systemctl start tor\n\n# monitor logs:\nsudo less +F /var/log/tor/log\nsudo less +F /var/lib/tor/pt_state/caddy.log\n```\n\n### PT arguments\nAs mentioned in code, `flag` package is global and PT arguments are passed together with those of Caddy.\n\n```\n\nUsage of ./server:\n  -runcaddy\n       Start Caddy web server on ports 443 and 80 (redirects to 443) together with the PT.\n       You can disable this option, set static 'ServerTransportListenAddr httpsproxy 127.0.0.1:ptPort' in torrc,\n       spin up frontend manually, and forward client's CONNECT request to 127.0.0.1:ptPort. (default true)\n    -servername string\n         Server Name used. Used as TLS SNI on the client side, and to start Caddy.\n      -agree\n           Agree to the CA's Subscriber Agreement\n      -email string\n           Default ACME CA account email address\n    -cert string\n         Path to TLS cert. Requires --key. If set, caddy will not get Lets Encrypt TLS certificate.\n    -key string\n         Path to TLS key. Requires --cert. If set, caddy will not get Lets Encrypt TLS certificate.\n  -logfile string\n       Log file for Pluggable Transport. (default: \"$TOR_PT_STATE_LOCATION/caddy.log\" -\u003e /var/lib/tor/pt_state/caddy.log)\n  -url string\n       Set/override access url in form of https://username:password@1.2.3.4:443/.\n       If servername is set or cert argument has a certificate with correct domain name,\n       this arg is optional and will be inferred, username:password will be auto-generated and stored, if not provided.\n```\n\n## Configure client\n\nIdeally, this will be integrated with the Tor browser and distributed automatically, so clients would have to do nothing\nIn the meantime, here's how to test it with Tor Browser Bundle:\n\n1. Download [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en)\n2. Build httpsclient and configure torrc:\n```\n  git clone https://git.torproject.org/pluggable-transports/httpsproxy.git\n  cd httpsproxy/client\n  go get\n  go build\n  PATH_TO_CLIENT=`pwd`\n  PATH_TO_TORRC=\"/etc/tor/torrc\" # if TBB is used, path will be different\n  echo \"ClientTransportPlugin httpsproxy exec ${PATH_TO_CLIENT}/client\" \u003e\u003e $PATH_TO_TORRC\n```\n4. Launch Tor Browser, select \"Tor is censored in my country\" -\u003e \"Provide a bridge I know\"\n5. Copy bridge line like \"httpsproxy 0.4.2.0:3 url=https://username:password@httpsproxy.com\".\n   If you set up your own server, bridge line will be printed to caddy.log on server launch.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergeyfrolov%2Fhttpsproxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsergeyfrolov%2Fhttpsproxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergeyfrolov%2Fhttpsproxy/lists"}