Skip to content

Conversation

@RubenVerborgh
Copy link
Contributor

@RubenVerborgh RubenVerborgh commented Jul 13, 2017

This pull requests extends the Solid server with an acceptCertificateHeader option. If enabled (default: no), the Solid server accepts a client certificate in PEM format through the X-SSL-Cert HTTP header.

This can be used in combination with the following NGINX options:

ssl_verify_client optional_no_ca;
proxy_set_header X-SSL-CERT $ssl_client_cert;

That way, NGINX can terminate the SSL connection (and thus run multiple services on port 443), whereas Solid can still check whether the certificate matches the WebID.

Security considerations

In this configuration, the Solid server does not verify whether the client has the matching private key to the certificate (NGINX does). As such, acceptCertificateHeader should never be enabled on front-facing servers.

The WebID-TLS implementation assumed an end-to-end TLS connection
from the client to the server, so reverse proxies were not possible.
With this commit, the reverse proxy can terminate the TLS connection
and pass the client certificate through the X-SSL-Cert HTTP header.
This is a native module, which might not compile on all platforms.
Furthermore, it is only needed for header-based WebID auth.
@dmitrizagidulin
Copy link
Contributor

@RubenVerborgh looks good! Thanks.

@dmitrizagidulin dmitrizagidulin merged commit b0591af into dz_oidc Jul 13, 2017
@dmitrizagidulin dmitrizagidulin deleted the feature/tls-cert-header branch July 13, 2017 16:52
@RubenVerborgh RubenVerborgh added this to the 4.0.0 milestone Aug 10, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants