Skip to content

Blank Page after Login with HTTPS #1122

Closed

Description

@s94285
  • code-server version: 2.1650-vsc1.39.2
  • OS Version: Ubuntu 16.04 under Windows 10 subsystem of Linux

Description

I got a blank screen after login with HTTPS enabled, but everything works well without HTTPS.

Steps to Reproduce

Command :
~/code-server2.1650-vsc1.39.2-linux-x86_64/code-server --host 192.168.2.200 --port 20080 --cert /etc/letsencrypt/live/s94285vscode.ddns.net/fullchain.pem --cert-key /etc/letsencrypt/live/s94285vscode.ddns.net/privkey.pem --verbose -s --log trace

Output :
info Server listening on https://192.168.2.200:20080
info - Password is fa7271ff44002589737f939e
info - To use your own password, set the PASSWORD environment variable
info - To disable use --auth none
info - Using provided certificate and key for HTTPS

Then open browser and login.

Trace from Chrome's console

workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][initial][s94285vscode.ddns.net:80] 1/6. invoking socketFactory.connect().
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][initial][s94285vscode.ddns.net:80] 2/6. socketFactory.connect() was successful.
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][initial][s94285vscode.ddns.net:80] 3/6. sending AuthRequest control message.
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][initial][s94285vscode.ddns.net:80] 4/6. received SignRequest control message.
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][initial][s94285vscode.ddns.net:80] 5/6. sending ConnectionTypeRequest control message.
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][initial][s94285vscode.ddns.net:80] 6/6. handshake finished, connection is up and running after 563 ms!
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] starting reconnecting loop. You can get more information with the trace log level.
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] waiting for 5 seconds before reconnecting...
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] resolving connection...
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] connecting to s94285vscode.ddns.net:80...
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][reconnect][s94285vscode.ddns.net:80] 1/6. invoking socketFactory.connect().
workbench.web.api.js:1605 WebSocket connection to 'wss://s94285vscode.ddns.net/?reconnectionToken=813ed4cd-4e00-4373-8169-decf8b45ce94&reconnection=true&skipWebSocketFrames=false' failed: WebSocket opening handshake timed out
create @ workbench.web.api.js:1605
connect @ workbench.web.api.js:1606
(anonymous) @ workbench.web.api.js:1606
d @ workbench.web.api.js:1606
h @ workbench.web.api.js:1608
u @ workbench.web.api.js:1609
_reconnect @ workbench.web.api.js:1615
_runReconnectingLoop @ workbench.web.api.js:1613
workbench.web.api.js:1460 ERR [remote-connection][Management ][813ed…][reconnect][s94285vscode.ddns.net:80] socketFactory.connect() failed. Error:
workbench.web.api.js:1460 ERR Error: WebSocket close with status code 1006
at WebSocket. (workbench.web.api.js:1605)
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] A temporarily not available error occured while trying to reconnect, will try again...
workbench.web.api.js:1460 TRACE Error: WebSocket close with status code 1006
at WebSocket. (workbench.web.api.js:1605)
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] waiting for 5 seconds before reconnecting...
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] resolving connection...
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] connecting to s94285vscode.ddns.net:80...
workbench.web.api.js:1460 TRACE [remote-connection][Management ][813ed…][reconnect][s94285vscode.ddns.net:80] 1/6. invoking socketFactory.connect().
workbench.web.api.js:1460 ERR [remote-connection] The time limit has been reached for a connection. Error:
workbench.web.api.js:1460 ERR Error: Time limit reached
at workbench.web.api.js:1615
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] A network error occured while trying to reconnect, will try again...
workbench.web.api.js:1460 TRACE Error: Time limit reached
at workbench.web.api.js:1615
workbench.web.api.js:1460 INFO [remote-connection][Management ][813ed…][reconnect] waiting for 10 seconds before reconnecting...

Activity

  1. sr229 commented on Oct 29, 2019

    @sr229
    Contributor

    I can't confirm this, is this WSL1 or WSL2?

  2. added and removed
    bugSomething isn't working
    on Oct 29, 2019
  3. s94285 commented on Oct 29, 2019

    @s94285
    Author

    @sr229 Thanks for replying.
    It's on WSL1. I'll try WSL2 later.

  4. s94285 commented on Oct 29, 2019

    @s94285
    Author

    @sr229 I'd like to try WSL2 but it is incompatible with vmware.
    So I'll just stick to WSL1. If the problem is caused by WSL1, I'll run it on virtual machine. Thanks.

  5. s94285 commented on Oct 29, 2019

    @s94285
    Author

    @sr229 Here's the error that shows on chrome's console:
    Uncaught TypeError: Cannot read property 'hasPendingUpdate' of undefined at p.get hasPendingUpdate [as hasPendingUpdate] (workbench.web.api.js:sourcemap:1627) at workbench.web.api.js:sourcemap:1627
    Then reconnect loop started. Each retry get this error:
    workbench.web.api.js:sourcemap:1605 WebSocket connection to 'wss://s94285vscode.ddns.net/?reconnectionToken=efd1aceb-a767-4e75-af4c-5fb90c4f92e0&reconnection=true&skipWebSocketFrames=false' failed: WebSocket opening handshake timed out

  6. code-asher commented on Oct 29, 2019

    @code-asher
    Member

    The biggest difference between HTTPS and HTTP is that code-server has to create a proxy socket which is then passed to the extension host (since TLS sockets cannot be passed to other processes). This uses net.createServer and net.connect on ${os.tmpdir()}/code-server/tls-proxy.

    I'm not very familiar with WSL but maybe it has something to do with that.

  7. sr229 commented on Oct 29, 2019

    @sr229
    Contributor

    I think this is something to do with WSL1's networking AFAIK, WSL2 uses a virtual switch which should handle HTTPS properly. This may be a WSL issue.

  8. Shadowist commented on Nov 2, 2019

    @Shadowist

    I get the same with Safari in iPadOS 13.2 (17B84) now. However, Safari in macOS 10.15.1 works okay in my network.

    Edit: http works okay as well.

  9. code-asher commented on Nov 4, 2019

    @code-asher
    Member

    Ah you can ignore the 80 in that message. You should be able to see the real connection endpoint in the network tab. VS Code tries to connect over a port and we override it to use the current URL but it's not updated in that message.

  10. nhooyr commented on Jan 29, 2020

    @nhooyr
    Contributor

    If this is still a problem, please feel free to reopen.

  11. clsx524 commented on Feb 2, 2020

    @clsx524

    i still see the same issue. I installed it with traefik to provide SSL on Ubuntu 19.10. Code server is running in docker with http (I did not provide the cert, instead, it’s installed with traefik). I am only able to use it on my Mac with chrome. I tried on safari (mac), safari (iOS 13.3.1), chrome (iOS 13.3.1) but they all got blank page and same error “WebSocket close with status code 1006“ as above.

    Traefik.toml (ver. 1.7.20)

    defaultEntryPoints = ["http", "https"]
    
    [entryPoints]
      [entryPoints.http]
      address = ":80"
      compress = true
        [entryPoints.http.redirect]
        entryPoint = "https"
    
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]
          [entryPoints.https.tls.ClientCA]
            optional = true
          [[entryPoints.https.tls.certificates]]
            certFile = "/etc/traefik/certs/my.cert"
            keyFile = "/etc/traefik/certs/my.key"
    
      [entryPoints.traefik]
      address = ":8083"
    
    

    Labels for code server

          traefik.backend: "code"
          traefik.frontend.rule: "Host:code.domain.com"
          traefik.enable: "true"
          traefik.port: "8080"
    
  12. nhooyr commented on Feb 2, 2020

    @nhooyr
    Contributor

    Not working with iOS is expected since you need a non self signed certificate but are you sure it's not working with Safari on Mac? You should see a screen explaining the situation and then you can override and connect.

  13. clsx524 commented on Feb 3, 2020

    @clsx524

    Not working with iOS is expected since you need a non self signed certificate but are you sure it's not working with Safari on Mac? You should see a screen explaining the situation and then you can override and connect.

    Is there any way to get non self signed certificate for my local code server in a docker instance? I tried letsencrypt, but it does not take local IP address and unverified domain.

  14. clsx524 commented on Feb 9, 2020

    @clsx524

    i still see the same issue. I installed it with traefik to provide SSL on Ubuntu 19.10. Code server is running in docker with http (I did not provide the cert, instead, it’s installed with traefik). I am only able to use it on my Mac with chrome. I tried on safari (mac), safari (iOS 13.3.1), chrome (iOS 13.3.1) but they all got blank page and same error “WebSocket close with status code 1006“ as above.

    Traefik.toml (ver. 1.7.20)

    defaultEntryPoints = ["http", "https"]
    
    [entryPoints]
      [entryPoints.http]
      address = ":80"
      compress = true
        [entryPoints.http.redirect]
        entryPoint = "https"
    
      [entryPoints.https]
      address = ":443"
        [entryPoints.https.tls]
          [entryPoints.https.tls.ClientCA]
            optional = true
          [[entryPoints.https.tls.certificates]]
            certFile = "/etc/traefik/certs/my.cert"
            keyFile = "/etc/traefik/certs/my.key"
    
      [entryPoints.traefik]
      address = ":8083"
    

    Labels for code server

          traefik.backend: "code"
          traefik.frontend.rule: "Host:code.domain.com"
          traefik.enable: "true"
          traefik.port: "8080"
    

    Figured out. My solution is not related to code server but still documented here for future reference

    1. in traefik config, TLS can set to minimum 1.3 but I have to make sure no cypher suites are provided. Incompatible cypher suites would result in errors.
    2. on cloudflare, TLS version should be set to 1.2 minimum, instead of 1.3 minimum. In this way, safari would be as least able to log wss failure, error code 401. The request is still sent with TLS 1.3 but I don't know why this config would matter (chrome does not have this problem).
    3. for the error code 401, I have to disable basic auth in traefik because the authorization code is not part of the request in safari, resulting in 401. However, Chrome would be able to send authorization code. In the end, I use the authorization built with code server.
  15. frederickbeaulieu commented on Jun 3, 2020

    @frederickbeaulieu

    Had the same problem with Synology Reverse Proxy.

    Had to set the Proxy Http version to 1.0 in Advanced Settings

  16. long-ris3 commented on Jun 29, 2020

    @long-ris3

    Had to set the Proxy Http version to 1.0 in Advanced Settings

    @frederickbeaulieu I still see the blank page after setting the proxy version. Did you do anything else special to make it work on Synology? I set up code-server in a Ubuntu container. It works fine on HTTP without the reverse proxy, but gets stuck at the blank page after login on HTTPS through the proxy. Thanks.

  17. frederickbeaulieu commented on Jun 29, 2020

    @frederickbeaulieu

    Here is my config, sorry for the delay, I just moved to a new house and the Syno was not setup yet.

    Docker Image :
    image

    https://registry.hub.docker.com/r/linuxserver/code-server/

    Docker config :
    image

    Reverse proxy settings :

    image

    image

    image

  18. frederickbeaulieu commented on Jun 29, 2020

    @frederickbeaulieu

    @frederickbeaulieu I still see the blank page after setting the proxy version. Did you do anything else special to make it work on Synology? I set up code-server in a Ubuntu container. It works fine on HTTP without the reverse proxy, but gets stuck at the blank page after login on HTTPS through the proxy. Thanks.

    Hope this help

  19. long-ris3 commented on Jul 1, 2020

    @long-ris3

    @frederickbeaulieu I still see the blank page after setting the proxy version. Did you do anything else special to make it work on Synology? I set up code-server in a Ubuntu container. It works fine on HTTP without the reverse proxy, but gets stuck at the blank page after login on HTTPS through the proxy. Thanks.

    Hope this help

    Adding the custom headers and ticking the HSTS/HTTP2 boxes in the reverse proxy seem to have done the trick. Thanks!

  20. Eternity714 commented on Apr 1, 2021

    @Eternity714

    i still see the same issue,i use docker as the container and use frp to route

    docker-compose.yml

    version: "3.8"
    services:
      frpc:
        image: snowdreamtech/frpc
        volumes:
          - "./frpc.ini:/etc/frp/frpc.ini:ro"
          - "./code.gkotta.cn.crt:/etc/frp/server.crt:ro"
          - "./code.gkotta.cn.key:/etc/frp/server.key:ro"
        restart: unless-stopped
        networks:
          backend:
        environment:
          - "LOCAL_ADDR=code"
          - "LOCAL_PORT=8080"
          - "SUBDOMAIN=code"
      code-server:
        image: codercom/code-server
        ports:
          - "8080:8080"
        volumes:
          - "./data:/home/coder/project"
        environment:
          - "PASSWORD=******"
        restart: unless-stopped
        networks:
          backend:
            aliases:
              - code
    
    networks:
      backend:
    

    frpc.ini

    [common]
    server_addr = x.x.x.x
    server_port = 7000
    
    [code-server]
    type = http
    local_ip = code
    local_port = 8080
    subdomain = code
    
    [code-server-https]
    type = https
    subdomain = code
    
    plugin = https2http
    plugin_local_addr = code:8080
    
    # HTTPS 证书相关的配置
    plugin_crt_path = /etc/frp/server.crt
    plugin_key_path = /etc/frp/server.key
    plugin_host_header_rewrite = 127.0.0.1
    plugin_header_X-From-Where = frp
    
  21. jsjoeio commented on Apr 1, 2021

    @jsjoeio
    Contributor

    Hi @Eternity714 - if you're seeing issues, please open a new bug report ticket and fill out the template. That'll help us help you faster! Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions