summaryrefslogtreecommitdiffstats
path: root/docs/manual/howto/encrypt.xml
blob: 61d0719c67a7ef59de85a584364d63454fa10518 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="encrypt.xml.meta">
<parentdocument href="./">How-To / Tutorials</parentdocument>

  <title>How to Encrypt Your Traffic</title>

  <summary>
    <p>This is the how to guide for making your Apache httpd use encryption to transfer
    data between you and your visitors. Instead of http: links, your site will use
    https: ones and, if everything is setup correctly, people visiting your site will
    have their privacy better protected.
    </p>
    <p>
    This How-To is intended for people that are not really into SSL/TLS and ciphers
    and all this crypto techno-babble (We are joking, it's a serious field with
    serious experts and real problems to solve - but it sounds like techno-babble to
    anyone not intimate with it). People who have heard that their http: server is
    not really secure enough nowadays. That spies and bad guys are listening. That even
    legitimate corporations are inserting data into their web pages and selling 
    profiles of visitors.
    </p>
    <p>
    This guide wants to help you migrate your httpd server from serving insecure http: links
    to encrypted https: ones, without you becoming a SSL expert first. You might get
    fascinated by all this crypto things and study it more and become a real expert. But
    you also might not, run a reasonably secure web server nevertheless and do other
    things good for mankind with your time.
    </p>
    <p>
    You will get a rough idea what roles these mysterious things called "certificate" and 
    "private key" play and how they are used to let your visitors be sure they are talking
    to your server. You will <em>not</em> be told <em>how</em> this works, just how it
    is used: it's basically about passports.
    </p>
  </summary>
  <seealso><a href="../ssl/ssl_howto.html">SSL How-To</a></seealso>
  <seealso><a href="../mod/mod_ssl.html">mod_ssl</a></seealso>
  <seealso><a href="../mod/mod_md.html">mod_md</a></seealso>

  <section id="protocol">
    <title>A short Introduction Certificates, e.g. Internet Passports</title>
    <p>
    The TLS protocol (formerly known as SSL) is a way a client and a server 
    can talk to each other without anyone else listening, or better understanding
    a thing. It is what your browser uses when you open a https: link. 
    </p>
    <p>
    In addition to having a private conversation with a server, your browser also needs
    to know that it really talks to the server - and not someone else acting like it. That,
    next to the encryption, is the other part of the TLS protocol.
    </p>
    <p>
    In order to do that, your server does not only need the software for TLS, e.g. the
    <a href="../mod/mod_http2.html">mod_ssl</a> module, but some sort of identity proof
    on the Internet. This is commonly referred to as a <em>certificate</em>. Basically, everyone
    has the same mod_ssl and can encrypt, but only your have <em>your</em> certificate
    and with that, you are you.
    </p>
    <p>
    A certificate is the digital equivalent of a passport. It contains two things: a stamp
    of approval from the people issuing the passport and a reference to your digital
    fingerprints, e.g. what is called a <em>private key</em> in encryption terms.
    </p>
    <p>
    When you configure your Apache httpd for https: links, you need to give it the certificate and
    the private key. If you never give the key to anyone else, only you will be able to prove
    to visitors that the certificate belongs to you. That way, a browser talking to your
    server a second time will be sure that it is indeed the very same server it talked
    to before.
    </p>
    <p>
    But how does it know that it is the real server, the first time it starts talking to
    someone? Here, the digital rubber stamping comes into play. The rubber stamp is done
    by someone else, using her own private key. That person has also a certificate, e.g.
    her own passport. The browser can make sure that this passport is based on the same
    key that was used to rubber stamp your server passport. Now, instead of making sure
    that your passport is correct, it must make sure that the passport of the person that 
    says <em>your</em> passport is correct, is correct. 
    </p>
    <p>
    And that passport is also rubber stamped digitally, by someone else with a key and a 
    certificate. So the browser only needs to make sure that <em>that</em> one is correct
    that says it is correct to trust the one that says your server is correct. This trusting
    game can go to a few or many levels (usually less than 5).
    </p>
    <p>
    In the end, the browser will encounter a passport that is stamped by its own key. It's
    a Gloria Gaynor certificate that says "I am what I am!". The browser then either trust
    this Gloria or not. If not, your server is also not trusted. Otherwise, it is. Simple. 
    </p>
    <p>
    The trust check for the Gloria Gaynors of the Internet is easy: your browser (or your
    operating system) comes with list of Gloria passports to trust, pre-installed. If it 
    sees a Gloria certificate, it is either in this list or not to be trusted.
    </p>
    <p>
    This whole thing works as long as everyone keeps his private keys to himself. Anyone copying
    such a key can impersonate the key owner. And if the owner can rubber stamp passports, the
    impersonator can also do that. And all the passports stamped by an impersonator, 
    all those certificates will look 100% valid, indistinguishable from the "real" ones.
    </p>
    <p>
    So, this trust model works, but it has its limits. That is why browser makers are so keen
    on having the correct Gloria Gaynor lists and threaten to expel anyone from it that
    is careless with her keys.
    </p>
  </section>

  <section id="buycert">
    <title>Buy a Certificate</title>
    <p>
    Well, you can buy one. There are a lot of companies selling Internet Passports as a service. In
    <a href="https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReport">this list 
    from Mozilla</a> you find all companies that the Firefox browser trusts. Pick one, visit their
    website and they will tell you what it costs. And how you need to prove that you are who
    you claim to be so they can rubber stamp your passport with confidence. 
    </p>
    <p>
    They all have their own methods, also depending on what kind of passport you apply for, and
    it's probably some sort of click web interface in a browser. They may send you an email that
    you need to answer or do something else. In the end, they will show you how to generate
    your own, unique private key and issue you a stamped passport matching it.
    </p>
    <p>
    You then place the key in one file, the certificate in another. Put these on your server, make
    sure that only a trusted user can read the key file and add it to your httpd configuration. 
    This is extensively covered in the <a href="../ssl/ssl_howto.html">SSL How-To</a>.
    </p>
    <p>
    </p>
  </section>

  <section id="freecert">
    <title>Get a Free Certificate</title>
    <p>
    There are also companies that offer certificates for web servers free of charge. The pioneer
    in this is <a href="https://letsencrypt.org">Let's Encrypt</a> which is a service of the
    <a href="https://www.abetterinternet.org/">Internet Security Research Group (ISRG)</a>, a not-for-profit organization to 
    "reduce financial, technological, and education barriers to secure communication over the 
    Internet."
    </p>
    <p>
    They not only offer free certificates, they also developed an interface that can be used by
    your Apache httpd to get one. This is where <a href="../mod/mod_md.html">mod_md</a>
    comes in.
    </p>
    <p>
    (zoom out the camera on how to configure mod_md and virtual host...)
    </p>
  </section>
    
</manualpage>