ssl client certificate docs
This commit is contained in:
parent
9cc4b5ffc2
commit
0ff131fbb1
1 changed files with 174 additions and 0 deletions
174
doc/ssl-client-certificates.rst
Normal file
174
doc/ssl-client-certificates.rst
Normal file
|
@ -0,0 +1,174 @@
|
|||
=======================
|
||||
SSL client certificates
|
||||
=======================
|
||||
|
||||
By using SSL client certificates, you get automatically logged into
|
||||
SemanticScuttle without using a password or submitting a login form.
|
||||
|
||||
Any number of certificates can be registered with a user account,
|
||||
making it easy to login to the same installation from home and from
|
||||
work - without risking to use the same certificate on both machines.
|
||||
|
||||
|
||||
Usage scenarios
|
||||
===============
|
||||
The scenarios assume that the web server is configured_ properly
|
||||
to request client certificates.
|
||||
|
||||
.. _configured: `Configuring your web server`_
|
||||
|
||||
|
||||
Registering a certificate with an existing account
|
||||
--------------------------------------------------
|
||||
You already have an account and want to associate a SSL client certificate
|
||||
with it.
|
||||
|
||||
1. Visit your profile page
|
||||
2. Click "Register current certificate to automatically login."
|
||||
|
||||
That's it. Now logout and click "Home". You will be logged in again
|
||||
automatically.
|
||||
|
||||
|
||||
Registering a certificate with a new account
|
||||
--------------------------------------------
|
||||
When you do not have an user account yet, just visit the registration
|
||||
page. Your email address will already be filled in, using the information
|
||||
from the SSL certificate.
|
||||
|
||||
Provide the rest of the data and submit the form.
|
||||
The certificate will automatically be associated to your account,
|
||||
and the user name will also be set for you.
|
||||
|
||||
|
||||
|
||||
Configuring your web server
|
||||
===========================
|
||||
|
||||
Getting SSL certificates
|
||||
------------------------
|
||||
You need both a server certificate for normal HTTPS mode, as well as a client
|
||||
certificate in your browser.
|
||||
|
||||
CAcert.org is a good place to obtain both.
|
||||
You are of course free to generate your own certificate with i.e. openssl
|
||||
or buy a certificate from another certificate authority, but this is out
|
||||
of this document's scope.
|
||||
|
||||
Server certificate
|
||||
''''''''''''''''''
|
||||
First, generate a Certificate signing request with the `CSR generator`__.
|
||||
Store the key file under ::
|
||||
|
||||
/etc/ssl/private/bookmarks.cweiske.de.key
|
||||
|
||||
Use the the .csr file and the CAcert web interface to generate a signed
|
||||
certificate. Store it as ::
|
||||
|
||||
/etc/ssl/private/bookmarks.cweiske.de-cacert.pem
|
||||
|
||||
Now fetch both official CAcert certificates (root and class 3) and put both
|
||||
together into ::
|
||||
|
||||
/etc/ssl/private/cacert-1and3.crt
|
||||
|
||||
.. _CSR: http://wiki.cacert.org/CSRGenerator
|
||||
__ CSR_
|
||||
|
||||
|
||||
Client certificate
|
||||
''''''''''''''''''
|
||||
CAcert also offers to create client certificates. You do not need a
|
||||
certificate sign request but just can create it on their web page.
|
||||
|
||||
After creation, you can simply install it in your browser by clicking
|
||||
on the appropriate link on the CAcert page.
|
||||
|
||||
Once you got the certificate installed in your browser, you can transfer
|
||||
it to other browsers by exporting it in the `PKCS #12` format
|
||||
(with private key included) and importing it in any other browsers
|
||||
you use.
|
||||
|
||||
|
||||
|
||||
Apache configuration
|
||||
--------------------
|
||||
To make use of SSL client certificates, you need to deliver SemanticScuttle
|
||||
via HTTPS.
|
||||
|
||||
A basic virtual host configuration with SSL looks like this:
|
||||
|
||||
::
|
||||
|
||||
<VirtualHost *:443>
|
||||
ServerName bookmarks.cweiske.de
|
||||
|
||||
LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon
|
||||
CustomLog /var/log/apache2/access_log vcommon
|
||||
|
||||
VirtualDocumentRoot /home/cweiske/Dev/html/hosts/bookmarks.cweiske.de
|
||||
<Directory "/home/cweiske/Dev/html/hosts/bookmarks.cweiske.de">
|
||||
AllowOverride all
|
||||
</Directory>
|
||||
|
||||
SSLEngine On
|
||||
SSLCertificateFile /etc/ssl/private/bookmarks.cweiske.de-cacert.pem
|
||||
SSLCertificateKeyFile /etc/ssl/private/bookmarks.cweiske.de.key
|
||||
|
||||
SSLCACertificateFile /etc/ssl/private/cacert-1and3.crt
|
||||
</VirtualHost>
|
||||
|
||||
Apart from that, you might need to enable the SSL module in your webserver,
|
||||
i.e. by executing ::
|
||||
|
||||
$ a2enmod ssl
|
||||
|
||||
|
||||
Now that SSL works, you can configure your web server to request client
|
||||
certificates.
|
||||
|
||||
::
|
||||
|
||||
...
|
||||
</Directory>
|
||||
|
||||
SSLVerifyClient optional
|
||||
SSLVerifyDepth 1
|
||||
SSLOptions +StdEnvVars
|
||||
</VirtualHost>
|
||||
|
||||
There are several options you need to set:
|
||||
|
||||
|
||||
``SSLVerifyClient optional``
|
||||
You may choose ``optional`` or ``required`` here.
|
||||
``optional`` asks the browser for a client certificate but accepts
|
||||
if the browser (the user) does choose not to send any certificate.
|
||||
This is the best option if you want to be able to login with and
|
||||
without a certificate.
|
||||
|
||||
Setting ``required`` makes the web server terminate the connection
|
||||
when no client certificate is sent by the browser.
|
||||
This option may be used when all users have their client certificate set.
|
||||
|
||||
``SSLVerifyDepth 1``
|
||||
Your client certificate is signed by a certificate authority (CA),
|
||||
and your web server trusts the CA specified in ``SSLCACertificateFile``.
|
||||
CA certificates itself may be signed by another authority, i.e. like ::
|
||||
|
||||
CAcert >> your own CA >> your client certificate
|
||||
|
||||
In this case, you have a higher depth. For most cases, 1 is enough.
|
||||
|
||||
``SSLOptions +StdEnvVars``
|
||||
This makes your web server pass the SSL environment variables to PHP,
|
||||
so that SemanticScuttle can detect that a client certificate is available
|
||||
and read its data.
|
||||
|
||||
In case you need the complete certificate
|
||||
\- which SemanticScuttle does *not* need - you have to add ``+ExportCertData``
|
||||
to the line.
|
||||
|
||||
|
||||
That's it. Restart your web server and visit your SemanticScuttle installation.
|
||||
Continue reading the `Usage scenarios`_.
|
Loading…
Reference in a new issue