"SfR Fresh" - the SfR Freeware/Shareware Archive 
Member "Lynx/lynx_doc/docs/README.rootcerts" of archive lynx.zip:
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
1 DOS/Windows-oriented notes on Root Certificates
2
3 To use certificates or a cert bundle within an SSL enabled
4 application such as lynx you must place your certificate
5 files into a known directory, and set the environment
6 variables to a proper value (e.g. in CONFIG.SYS file).
7
8 set SSL_CERT_DIR=x:/usr/local/ssl/certs
9 set SSL_CERT_FILE=x:/usr/local/ssl/cert.pem
10
11 (See "What are root certificates" below.)
12
13
14 Q. Why would I want to install openssl.exe?
15 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16
17 openssl.exe is used to manage certificates. (See "What are root certificates"
18 below.)
19
20 Q. How to install openssl.exe?
21 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
22
23 Put openssl.exe in a directory in your PATH and the DLLs to a directory
24 in your LIBPATH.
25
26 Copy conf\openssl.cnf.demoCA to a directory of your
27 choice, rename it to openssl.conf and set the environment variable
28 OPENSSL_CONF by putting
29
30 SET OPENSSL_CONF=<your-directory>\openssl.cnf
31
32 into CONFIG.SYS.
33
34
35 Q. Why is this document so paranoid?
36 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
37
38 If you want to use OpenSSL, then probably your Internet transactions have
39 *real* monetary value embedded in them. And as usual, the security is as good
40 as the weakest link. This document unravels only the tip of the iceberg
41 of what can go wrong with improperly established "secure" connections. And
42 given the monetary value involved, "bad guys" have a high incentive to exploit
43 the weakest links. As experience shows, do not underestimate the intelligence
44 of bad guys...
45
46 Really, with security, a little knowledge is a dangerous thing; one can
47 suspect that many people, if they really understood the trust structures
48 associated with SSL, would be rather careful about checking the details
49 of certificates.
50
51 Q. What are root certificates?
52 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53
54 Making a secure connection is like sending your valuables (for storage or
55 consumption) to somebody who agreed to be at a prearranged place. To
56 guard the valuables on the way there, you can ask for a police escort; this is
57 what https:// connections are about. However, it does not make any sense to
58 have an escort if the goods are transfered to a random person who happens to be
59 at this place; one needs to certify the identity of the receiver as well.
60
61 The certification process is a chain; when site A wants to certify that it is
62 actually what it claims, it actually says "Check this certificate with site B";
63 to proceed, one needs to certify that site B is what it claims, so B may
64 redirect to site C etc. For this process to stop, some sites claim
65 "You must know my certificate, check it yourself". These certificates are
66 "root certificates"; one cannot verify such a site unless one has the
67 certificate for the "end of its certification chain". If you don't have the
68 relevant root certificate in your local certificates file, it means that
69 you don't trust anyone to vouch for the authenticity of the site.
70
71 So one should have a collection of known certificates from several well-known
72 sites known as "Root Certification Authorities". Most sites for large-scale
73 businesses have certificates which will eventually resolve to these places.
74 Such certicates represent people like Verisign that are in the business of
75 confirming the identity of servers, etc.
76
77 Additionally, since having yourself certified through another site costs,
78 some sites avoid this cost via presenting "end-of-chain certificates".
79 One should have a way to obtain these certificates via other means than
80 insecure Internet connection (e.g., one can walk into the office and copy
81 the certificate file to a floppy). These are so-called "Self-signed
82 certificates"; they are "root certificates" as well. The locally-installed
83 securely obtained copies of such certificates are referred to as
84 "local certificates". (See 'What is "Snake Oil Ltd."' below.)
85
86 If you are presented with a locally-unresolvable root certificate, and you
87 *believe* that you are really talking to the site, and not someone
88 in between (who is either completely simulating the site or relaying
89 your requests onto the real site - called a "man in the middle" attack),
90 you will still have an encrypted connection. Otherwise, you should act
91 as though the site was an impostor, unless and until you manage to get
92 a root certificate from a trustworthy source, and that root certificate
93 represents someone that you would trust to have vetted the site you
94 want to connect to.
95
96 Local certificates are stored in SSL_CERT_FILE (this "cert bundle", usually
97 named cert.pem, contains several signatures for "Root Certification
98 Authorities") and SSL_CERT_DIR (which has a signature per file, and usually
99 contain local copies of self-signed certificates).
100
101 There are three crucial considerations to be added to this picture:
102
103 a) While there are ways to ensure that the receivers are who they claim,
104 there is absolutely no technological way to verify how *trustworthy*
105 the receiving party is. It does not make sense to secure-send your
106 valuables to a certified receiver if this receiver is a crook (or will
107 just keep them later in a publicly accessible place).
108
109 b) "VeriSign Syndrome". For the above scheme of "a chain of trust" to work,
110 the "Root Certification Authorities" should be *very* trustworthy
111 high-integrity entities. Unfortunately, there are certain doubts that
112 this is so. E.g., fall 2003, VeriSign started an attack on DNS scheme
113 which could disrupt the whole architecture of Internet (hijacking *all*
114 unclaimed Internet addresses and redirecting them to a promotional site;
115 google for VeriSign DNS hijack).
116
117 One major company even issued a Microsoft certificate to a company
118 other than Microsoft, and there had to be a Windows critical update
119 to block that certificate.
120
121 c) Keep in mind that the "big 2 browsers" are adding an increasing
122 number of root certificates, and most users fail to realise that they
123 are putting a trust in the supply chain for the browser to give them
124 the certificates of reliable organisations (the browser suppliers could
125 make bad choices, or the browser could have been hacked before you got
126 it).
127
128 Incidentally, standard browsers come with certificates representing
129 very different levels of identity verification, but most people accept
130 all of those supplied with the big 2 as equally valid.
131
132 Q. How to obtain root certificates?
133 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
134
135 Certificate files, such as cert.pem, are security critical; you have to
136 trust whoever supplies it to you; all your certification process is no more
137 trustworthy than the site you downloaded cert.pem from. So you shouldn't just
138 accept any offer.
139
140 One way is to copy them from a machine which already obtained them in a secure
141 way. Another one is to extract them from a web browser which was itself
142 obtained in a secure way (see "How to extract certificates from Internet
143 Explorer" below). If anything else fails, obtaining a privately-generated
144 bundle from third-parties, such as
145
146 http://www.kfu.com/~nsayer/encryption/ca-bundle.crt.text
147
148 is *not* much better than no certificates at all, but may avoid some warnings
149 from applications. One of the places which has a bundle is the mod_ssl site.
150
151 Q. Should you trust this distribution system?
152 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
153
154 It is very hard to imagine a situation when the answer is different from
155 "Absolutely not!".
156
157 Indeed, obtaining the certificates is only half of the problem.
158 The certificates are going to be checked by the SSL library. Can you trust
159 these executables (DLLs)? Did you obtain the library via a secure connection?
160 Are you sure that the place you obtained it from has reasonable security
161 practice, so that the archive could not be tampered with? The latter place
162 most probably did not build the DLLs themselves; chances are they just
163 store what a fourth-party supplied them. Was *that* file transfer done via
164 secure channels? Can you trust this fourth-party so that it did not insert
165 Trojans?
166
167 Chances are that all of these questions are answered "No". There are still
168 major problems with bootstrapping security via the Internet...
169
170 What about the application which uses these DLLs? Do you have any reason to
171 trust it? What about the OS itself? Did it come from a trustworthy source
172 via trustworthy channels? Are you sure it was not tampered with?
173
174 Q. How to compile and link with OpenSSL libraries?
175 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176
177 Put the files from include and lib to your emx directory,
178 or directories on C_INCLUDE_PATH and LIBRARY_PATH.
179 Note that openssl should become a subdirectory of your include directory.
180 If you need .lib files you can create them using emxomf.
181
182 The supplied library files link against the new renamed dlls open_ssl and
183 cryptsll.
184
185 See the doc directory for some information and visit
186 http://www.columbia.edu/~ariel/ssleay/ for more infos.
187
188
189 Q. Why do you need your own keys and certificates?
190 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
191
192 There are several situations: having a server which accepts secure connections;
193 authenticating yourself to a server by means other than login/password,
194 sending S-Mime crypto-mail, authenticating from a client browser to a server.
195 In each of these situations one needs keys.
196
197 The following sites may be useful:
198
199 http://www.pseudonym.org/ssl/ssl_cook.html#environment
200 http://the.earth.li/~sgtatham/putty/0.53b/htmldoc/Chapter8.html#8.2
201
202 Q. How to generate your own keys and certificates?
203 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
204
205 There are many ways. A good solution is to use sslRexx. It provides everything
206 you need. PuTTYgen is a key generator that will work.
207
208 Below is a short description of how I made my own Certification Authority,
209 a Server Key for Apache and a client Key/Certificate for me, signed by my
210 own CA.
211
212
213 Q. Howto: Root CA (needed to self-sign all certificates)
214 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
215
216 Generate a CA-Key and store it in sub-directory private:
217
218 openssl genrsa -des3 -out private/MyOwnCA.pem 2048
219
220 Make a selfsigned certificate based on above key.
221
222 openssl req -new -x509 -days 730 -key private/CAkey.pem -out CAcert.pem
223
224 This certificate will expire in 2 years.
225
226 Optional: generate text output of this certificate:
227
228 openssl x509 -in ./CAcert.pem -text > CAcert.txt
229
230 Now you have a key and certificate for your own CA which can be used
231 to sign user and server keys. The CAcert is also needed to configure
232 Apache and Netscape. You can/should give away the CA certificate but
233 never give the CA key to anybody.
234
235
236 Q. Howto: Your Client Certificate/Key
237 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
238
239 Generate a private key
240 ----------------------
241
242 openssl genrsa -des3 -out hrom-key.pem 2048
243
244
245 Create a signing request (same command again)
246 ------------------------
247
248 openssl req -new -key hrom-key.pem -out hrom-req.pem
249
250 Let the CA sign it (same command again)
251 ------------------
252
253 openssl ca -in hrom-req.pem -out hrom-cert.pem -outdir MyOwnCA/newcerts
254
255 After you get back the certificate from the CA, combine it with
256 your private key and store the result as p12 file. This file can
257 be imported into your browser. The browser will use this file to present
258 to a server requiring it for access.
259
260 openssl pkcs12 -export -name Hromadka -in hrom-cert.pem -inkey hrom-key.pem -out hrom.p12
261
262
263 Security Notes: Never give your private key to a CA, they only need the
264 signing request. Never give away your p12 file. Always secure your private
265 keys with a passphrase.
266
267
268 Q. How to use c_rehash?
269 ~~~~~~~~~~~~~~~~~~~~~~
270
271 One needs a working port of Perl and cp.exe to run this. Set OPENSSL to the
272 full name of openssl executable. One may also need to change some ':' to
273 $Config{path_sep}. c_rehash finds certs from enviroment variables and allows
274 them to be recognized by openssl.
275
276 Q. How to extract certificates from Internet Explorer?
277 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
278
279 To make your own file of certificates, go to the
280 "Tools/Internet Options/Content/Certificates/Trusted Root Certificates"
281 section of IE. Select all the certificates, then "export" to a file.
282 It will be saved as a PKCS#7 file, with suffix ".p7b". You can call
283 it "ca_bundle.p7b". Then use openssl to convert it with the command:
284 "openssl pkcs7 -inform DER -in ca_bundle.p7b -print_certs -text -out cert.pem".
285 Ask your system administrator to put the file "cert.pem" in the openssl
286 directory and c_rehash it. Then lynx can check the certificates against the
287 set of certificates that you (or Microsoft) trusts, and you won't get the
288 warning message any more.
289
290 Q. How to install a self-signed certificate?
291 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
292
293 When you would like to trust a self-signed (non-commercial) certificate you will
294 need to get hold of the actual file. If it's a cert local to your network you
295 can ask the sysadmin to make it available for download as a link on a webpage.
296
297 If such file is not human-readable it's probably DER formatted and will need to
298 be converted to PEM format to allow openssl to use it.
299
300 To convert DER formatted certificates into something openssl can deal with:
301
302 Save the cert as site_name.crt in a directory. In that directory, type:
303
304 openssl x509 -inform DER -in site_name.crt -outform PEM -out site_name.pem
305
306 You can now copy this individual cert into the directory for that and hash the
307 cert by running c_rehash. A complete discussion of this procedure for unix is
308 in the document README.sslcerts.