FAQ revision 162911
159191SkrisOpenSSL  -  Frequently Asked Questions
259191Skris--------------------------------------
359191Skris
476866Skris[MISC] Miscellaneous questions
576866Skris
659191Skris* Which is the current version of OpenSSL?
759191Skris* Where is the documentation?
859191Skris* How can I contact the OpenSSL developers?
976866Skris* Where can I get a compiled version of OpenSSL?
1076866Skris* Why aren't tools like 'autoconf' and 'libtool' used?
1189837Skris* What is an 'engine' version?
12109998Smarkm* How do I check the authenticity of the OpenSSL distribution?
1376866Skris
1476866Skris[LEGAL] Legal questions
1576866Skris
1659191Skris* Do I need patent licenses to use OpenSSL?
1776866Skris* Can I use OpenSSL with GPL software? 
1876866Skris
1976866Skris[USER] Questions on using the OpenSSL applications
2076866Skris
2159191Skris* Why do I get a "PRNG not seeded" error message?
2279998Skris* Why do I get an "unable to write 'random state'" error message?
2359191Skris* How do I create certificates or certificate requests?
2459191Skris* Why can't I create certificate requests?
2559191Skris* Why does <SSL program> fail with a certificate verify error?
2668651Skris* Why can I only use weak ciphers when I connect to a server using OpenSSL?
2759191Skris* How can I create DSA certificates?
2859191Skris* Why can't I make an SSL connection using a DSA certificate?
2968651Skris* How can I remove the passphrase on a private key?
3076866Skris* Why can't I use OpenSSL certificates with SSL client authentication?
3176866Skris* Why does my browser give a warning about a mismatched hostname?
3289837Skris* How do I install a CA certificate into a browser?
33109998Smarkm* Why is OpenSSL x509 DN output not conformant to RFC2253?
34160814Ssimon* What is a "128 bit certificate"? Can I create one with OpenSSL?
3576866Skris
3676866Skris[BUILD] Questions about building and testing OpenSSL
3776866Skris
3876866Skris* Why does the linker complain about undefined symbols?
3968651Skris* Why does the OpenSSL test fail with "bc: command not found"?
4068651Skris* Why does the OpenSSL test fail with "bc: 1 no implemented"?
41109998Smarkm* Why does the OpenSSL test fail with "bc: stack empty"?
4289837Skris* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
4368651Skris* Why does the OpenSSL compilation fail with "ar: command not found"?
4476866Skris* Why does the OpenSSL compilation fail on Win32 with VC++?
45100936Snectar* What is special about OpenSSL on Redhat?
46109998Smarkm* Why does the OpenSSL compilation fail on MacOS X?
47100936Snectar* Why does the OpenSSL test suite fail on MacOS X?
48109998Smarkm* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
49109998Smarkm* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
50160814Ssimon* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
51160814Ssimon* Why does compiler fail to compile sha512.c?
52160814Ssimon* Test suite still fails, what to do?
5359191Skris
5476866Skris[PROG] Questions about programming with OpenSSL
5559191Skris
5676866Skris* Is OpenSSL thread-safe?
5776866Skris* I've compiled a program under Windows and it crashes: why?
5876866Skris* How do I read or write a DER encoded buffer using the ASN1 functions?
59142425Snectar* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
6076866Skris* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
6176866Skris* I've called <some function> and it fails, why?
6276866Skris* I just get a load of numbers for the error output, what do they mean?
6376866Skris* Why do I get errors about unknown algorithms?
6476866Skris* Why can't the OpenSSH configure script detect OpenSSL?
6576866Skris* Can I use OpenSSL's SSL library with non-blocking I/O?
6679998Skris* Why doesn't my server application receive a client certificate?
67109998Smarkm* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
68142425Snectar* I think I've detected a memory leak, is this a bug?
6976866Skris
7076866Skris===============================================================================
7176866Skris
7276866Skris[MISC] ========================================================================
7376866Skris
7459191Skris* Which is the current version of OpenSSL?
7559191Skris
7659191SkrisThe current version is available from <URL: http://www.openssl.org>.
77162911SsimonOpenSSL 0.9.8d was released on September 28th, 2006.
7859191Skris
7959191SkrisIn addition to the current stable release, you can also access daily
8059191Skrissnapshots of the OpenSSL development version at <URL:
8159191Skrisftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access.
8259191Skris
8359191Skris
8459191Skris* Where is the documentation?
8559191Skris
8659191SkrisOpenSSL is a library that provides cryptographic functionality to
8759191Skrisapplications such as secure web servers.  Be sure to read the
8859191Skrisdocumentation of the application you want to use.  The INSTALL file
8959191Skrisexplains how to install this library.
9059191Skris
9159191SkrisOpenSSL includes a command line utility that can be used to perform a
9259191Skrisvariety of cryptographic functions.  It is described in the openssl(1)
9359191Skrismanpage.  Documentation for developers is currently being written.  A
9459191Skrisfew manual pages already are available; overviews over libcrypto and
9559191Skrislibssl are given in the crypto(3) and ssl(3) manpages.
9659191Skris
9759191SkrisThe OpenSSL manpages are installed in /usr/local/ssl/man/ (or a
9859191Skrisdifferent directory if you specified one as described in INSTALL).
9959191SkrisIn addition, you can read the most current versions at
10059191Skris<URL: http://www.openssl.org/docs/>.
10159191Skris
10259191SkrisFor information on parts of libcrypto that are not yet documented, you
10359191Skrismight want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's
10459191Skrispredecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>.  Much
10559191Skrisof this still applies to OpenSSL.
10659191Skris
10759191SkrisThere is some documentation about certificate extensions and PKCS#12
10859191Skrisin doc/openssl.txt
10959191Skris
11059191SkrisThe original SSLeay documentation is included in OpenSSL as
11159191Skrisdoc/ssleay.txt.  It may be useful when none of the other resources
11259191Skrishelp, but please note that it reflects the obsolete version SSLeay
11359191Skris0.6.6.
11459191Skris
11559191Skris
11659191Skris* How can I contact the OpenSSL developers?
11759191Skris
11859191SkrisThe README file describes how to submit bug reports and patches to
11959191SkrisOpenSSL.  Information on the OpenSSL mailing lists is available from
12059191Skris<URL: http://www.openssl.org>.
12159191Skris
12259191Skris
12376866Skris* Where can I get a compiled version of OpenSSL?
12476866Skris
125127128SnectarYou can finder pointers to binary distributions in
126127128Snectarhttp://www.openssl.org/related/binaries.html .
127127128Snectar
12876866SkrisSome applications that use OpenSSL are distributed in binary form.
12976866SkrisWhen using such an application, you don't need to install OpenSSL
13076866Skrisyourself; the application will include the required parts (e.g. DLLs).
13176866Skris
132127128SnectarIf you want to build OpenSSL on a Windows system and you don't have
13376866Skrisa C compiler, read the "Mingw32" section of INSTALL.W32 for information
13476866Skrison how to obtain and install the free GNU C compiler.
13576866Skris
13676866SkrisA number of Linux and *BSD distributions include OpenSSL.
13776866Skris
13876866Skris
13976866Skris* Why aren't tools like 'autoconf' and 'libtool' used?
14076866Skris
14176866Skrisautoconf will probably be used in future OpenSSL versions. If it was
14276866Skrisless Unix-centric, it might have been used much earlier.
14376866Skris
14489837Skris* What is an 'engine' version?
14576866Skris
14689837SkrisWith version 0.9.6 OpenSSL was extended to interface to external crypto
14789837Skrishardware. This was realized in a special release '0.9.6-engine'. With
148160814Ssimonversion 0.9.7 the changes were merged into the main development line,
149160814Ssimonso that the special release is no longer necessary.
15089837Skris
151109998Smarkm* How do I check the authenticity of the OpenSSL distribution?
152109998Smarkm
153109998SmarkmWe provide MD5 digests and ASC signatures of each tarball.
154109998SmarkmUse MD5 to check that a tarball from a mirror site is identical:
155109998Smarkm
156109998Smarkm   md5sum TARBALL | awk '{print $1;}' | cmp - TARBALL.md5
157109998Smarkm
158109998SmarkmYou can check authenticity using pgp or gpg. You need the OpenSSL team
159160814Ssimonmember public key used to sign it (download it from a key server, see a
160160814Ssimonlist of keys at <URL: http://www.openssl.org/about/>). Then
161109998Smarkmjust do:
162109998Smarkm
163109998Smarkm   pgp TARBALL.asc
164109998Smarkm
16576866Skris[LEGAL] =======================================================================
16676866Skris
16759191Skris* Do I need patent licenses to use OpenSSL?
16859191Skris
16959191SkrisThe patents section of the README file lists patents that may apply to
17059191Skrisyou if you want to use OpenSSL.  For information on intellectual
17159191Skrisproperty rights, please consult a lawyer.  The OpenSSL team does not
17259191Skrisoffer legal advice.
17359191Skris
174160814SsimonYou can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
175160814Ssimon ./config no-idea no-mdc2 no-rc5
17659191Skris
17759191Skris
17876866Skris* Can I use OpenSSL with GPL software?
17959191Skris
18076866SkrisOn many systems including the major Linux and BSD distributions, yes (the
18176866SkrisGPL does not place restrictions on using libraries that are part of the
18276866Skrisnormal operating system distribution).
18359191Skris
18476866SkrisOn other systems, the situation is less clear. Some GPL software copyright
18576866Skrisholders claim that you infringe on their rights if you use OpenSSL with
18676866Skristheir software on operating systems that don't normally include OpenSSL.
18759191Skris
18876866SkrisIf you develop open source software that uses OpenSSL, you may find it
18989837Skrisuseful to choose an other license than the GPL, or state explicitly that
19076866Skris"This program is released under the GPL with the additional exemption that
19176866Skriscompiling, linking, and/or using OpenSSL is allowed."  If you are using
19276866SkrisGPL software developed by others, you may want to ask the copyright holder
19376866Skrisfor permission to use their software with OpenSSL.
19459191Skris
19576866Skris
19676866Skris[USER] ========================================================================
19776866Skris
19859191Skris* Why do I get a "PRNG not seeded" error message?
19959191Skris
20059191SkrisCryptographic software needs a source of unpredictable data to work
20159191Skriscorrectly.  Many open source operating systems provide a "randomness
202111147Snectardevice" (/dev/urandom or /dev/random) that serves this purpose.
203111147SnectarAll OpenSSL versions try to use /dev/urandom by default; starting with
204111147Snectarversion 0.9.7, OpenSSL also tries /dev/random if /dev/urandom is not
205111147Snectaravailable.
20659191Skris
207111147SnectarOn other systems, applications have to call the RAND_add() or
208111147SnectarRAND_seed() function with appropriate data before generating keys or
209111147Snectarperforming public key encryption. (These functions initialize the
210111147Snectarpseudo-random number generator, PRNG.)  Some broken applications do
211111147Snectarnot do this.  As of version 0.9.5, the OpenSSL functions that need
212111147Snectarrandomness report an error if the random number generator has not been
213111147Snectarseeded with at least 128 bits of randomness.  If this error occurs and
214111147Snectaris not discussed in the documentation of the application you are
215111147Snectarusing, please contact the author of that application; it is likely
216111147Snectarthat it never worked correctly.  OpenSSL 0.9.5 and later make the
217111147Snectarerror visible by refusing to perform potentially insecure encryption.
21859191Skris
219111147SnectarIf you are using Solaris 8, you can add /dev/urandom and /dev/random
220111147Snectardevices by installing patch 112438 (Sparc) or 112439 (x86), which are
221111147Snectaravailable via the Patchfinder at <URL: http://sunsolve.sun.com>
222111147Snectar(Solaris 9 includes these devices by default). For /dev/random support
223111147Snectarfor earlier Solaris versions, see Sun's statement at
224111147Snectar<URL: http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski>
225111147Snectar(the SUNWski package is available in patch 105710).
226111147Snectar
22779998SkrisOn systems without /dev/urandom and /dev/random, it is a good idea to
22879998Skrisuse the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for
22979998Skrisdetails.  Starting with version 0.9.7, OpenSSL will automatically look
23079998Skrisfor an EGD socket at /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool and
23179998Skris/etc/entropy.
23259191Skris
23379998SkrisMost components of the openssl command line utility automatically try
23479998Skristo seed the random number generator from a file.  The name of the
23579998Skrisdefault seeding file is determined as follows: If environment variable
23679998SkrisRANDFILE is set, then it names the seeding file.  Otherwise if
23779998Skrisenvironment variable HOME is set, then the seeding file is $HOME/.rnd.
23879998SkrisIf neither RANDFILE nor HOME is set, versions up to OpenSSL 0.9.6 will
23979998Skrisuse file .rnd in the current directory while OpenSSL 0.9.6a uses no
24079998Skrisdefault seeding file at all.  OpenSSL 0.9.6b and later will behave
24189837Skrissimilarly to 0.9.6a, but will use a default of "C:\" for HOME on
24279998SkrisWindows systems if the environment variable has not been set.
24359191Skris
24479998SkrisIf the default seeding file does not exist or is too short, the "PRNG
24579998Skrisnot seeded" error message may occur.
24659191Skris
24779998SkrisThe openssl command line utility will write back a new state to the
24879998Skrisdefault seeding file (and create this file if necessary) unless
24979998Skristhere was no sufficient seeding.
25079998Skris
25179998SkrisPointing $RANDFILE to an Entropy Gathering Daemon socket does not work.
25279998SkrisUse the "-rand" option of the OpenSSL command line tools instead.
25379998SkrisThe $RANDFILE environment variable and $HOME/.rnd are only used by the
25479998SkrisOpenSSL command line tools. Applications using the OpenSSL library
25579998Skrisprovide their own configuration options to specify the entropy source,
25679998Skrisplease check out the documentation coming the with application.
25779998Skris
25859191Skris
25979998Skris* Why do I get an "unable to write 'random state'" error message?
26079998Skris
26179998Skris
26279998SkrisSometimes the openssl command line utility does not abort with
26379998Skrisa "PRNG not seeded" error message, but complains that it is
26479998Skris"unable to write 'random state'".  This message refers to the
26579998Skrisdefault seeding file (see previous answer).  A possible reason
26679998Skrisis that no default filename is known because neither RANDFILE
26779998Skrisnor HOME is set.  (Versions up to 0.9.6 used file ".rnd" in the
26879998Skriscurrent directory in this case, but this has changed with 0.9.6a.)
26979998Skris
27079998Skris
27176866Skris* How do I create certificates or certificate requests?
27276866Skris
27376866SkrisCheck out the CA.pl(1) manual page. This provides a simple wrapper round
27476866Skristhe 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check
27576866Skrisout the manual pages for the individual utilities and the certificate
27676866Skrisextensions documentation (currently in doc/openssl.txt).
27776866Skris
27876866Skris
27976866Skris* Why can't I create certificate requests?
28076866Skris
28176866SkrisYou typically get the error:
28276866Skris
28376866Skris	unable to find 'distinguished_name' in config
28476866Skris	problems making Certificate Request
28576866Skris
28676866SkrisThis is because it can't find the configuration file. Check out the
28776866SkrisDIAGNOSTICS section of req(1) for more information.
28876866Skris
28976866Skris
29076866Skris* Why does <SSL program> fail with a certificate verify error?
29176866Skris
29276866SkrisThis problem is usually indicated by log messages saying something like
29376866Skris"unable to get local issuer certificate" or "self signed certificate".
29476866SkrisWhen a certificate is verified its root CA must be "trusted" by OpenSSL
29576866Skristhis typically means that the CA certificate must be placed in a directory
29676866Skrisor file and the relevant program configured to read it. The OpenSSL program
29776866Skris'verify' behaves in a similar way and issues similar error messages: check
29876866Skristhe verify(1) program manual page for more information.
29976866Skris
30076866Skris
30176866Skris* Why can I only use weak ciphers when I connect to a server using OpenSSL?
30276866Skris
30376866SkrisThis is almost certainly because you are using an old "export grade" browser
30476866Skriswhich only supports weak encryption. Upgrade your browser to support 128 bit
30576866Skrisciphers.
30676866Skris
30776866Skris
30876866Skris* How can I create DSA certificates?
30976866Skris
31076866SkrisCheck the CA.pl(1) manual page for a DSA certificate example.
31176866Skris
31276866Skris
31376866Skris* Why can't I make an SSL connection to a server using a DSA certificate?
31476866Skris
31576866SkrisTypically you'll see a message saying there are no shared ciphers when
31676866Skristhe same setup works fine with an RSA certificate. There are two possible
31776866Skriscauses. The client may not support connections to DSA servers most web
31876866Skrisbrowsers (including Netscape and MSIE) only support connections to servers
31976866Skrissupporting RSA cipher suites. The other cause is that a set of DH parameters
32076866Skrishas not been supplied to the server. DH parameters can be created with the
32176866Skrisdhparam(1) command and loaded using the SSL_CTX_set_tmp_dh() for example:
32276866Skrischeck the source to s_server in apps/s_server.c for an example.
32376866Skris
32476866Skris
32576866Skris* How can I remove the passphrase on a private key?
32676866Skris
32776866SkrisFirstly you should be really *really* sure you want to do this. Leaving
32876866Skrisa private key unencrypted is a major security risk. If you decide that
32976866Skrisyou do have to do this check the EXAMPLES sections of the rsa(1) and
33076866Skrisdsa(1) manual pages.
33176866Skris
33276866Skris
33376866Skris* Why can't I use OpenSSL certificates with SSL client authentication?
33476866Skris
33576866SkrisWhat will typically happen is that when a server requests authentication
33676866Skrisit will either not include your certificate or tell you that you have
33776866Skrisno client certificates (Netscape) or present you with an empty list box
33876866Skris(MSIE). The reason for this is that when a server requests a client
33976866Skriscertificate it includes a list of CAs names which it will accept. Browsers
34076866Skriswill only let you select certificates from the list on the grounds that
34176866Skristhere is little point presenting a certificate which the server will
34276866Skrisreject.
34376866Skris
34476866SkrisThe solution is to add the relevant CA certificate to your servers "trusted
34589837SkrisCA list". How you do this depends on the server software in uses. You can
34676866Skrisprint out the servers list of acceptable CAs using the OpenSSL s_client tool:
34776866Skris
34876866Skrisopenssl s_client -connect www.some.host:443 -prexit
34976866Skris
35076866SkrisIf your server only requests certificates on certain URLs then you may need
35176866Skristo manually issue an HTTP GET command to get the list when s_client connects:
35276866Skris
35376866SkrisGET /some/page/needing/a/certificate.html
35476866Skris
35576866SkrisIf your CA does not appear in the list then this confirms the problem.
35676866Skris
35776866Skris
35876866Skris* Why does my browser give a warning about a mismatched hostname?
35976866Skris
36076866SkrisBrowsers expect the server's hostname to match the value in the commonName
36176866Skris(CN) field of the certificate. If it does not then you get a warning.
36276866Skris
36376866Skris
36489837Skris* How do I install a CA certificate into a browser?
36589837Skris
36689837SkrisThe usual way is to send the DER encoded certificate to the browser as
36789837SkrisMIME type application/x-x509-ca-cert, for example by clicking on an appropriate
36889837Skrislink. On MSIE certain extensions such as .der or .cacert may also work, or you
36989837Skriscan import the certificate using the certificate import wizard.
37089837Skris
37189837SkrisYou can convert a certificate to DER form using the command:
37289837Skris
37389837Skrisopenssl x509 -in ca.pem -outform DER -out ca.der
37489837Skris
37589837SkrisOccasionally someone suggests using a command such as:
37689837Skris
37789837Skrisopenssl pkcs12 -export -out cacert.p12 -in cacert.pem -inkey cakey.pem
37889837Skris
37989837SkrisDO NOT DO THIS! This command will give away your CAs private key and
38089837Skrisreduces its security to zero: allowing anyone to forge certificates in
38189837Skriswhatever name they choose.
38289837Skris
383109998Smarkm* Why is OpenSSL x509 DN output not conformant to RFC2253?
38489837Skris
385109998SmarkmThe ways to print out the oneline format of the DN (Distinguished Name) have
386109998Smarkmbeen extended in version 0.9.7 of OpenSSL. Using the new X509_NAME_print_ex()
387109998Smarkminterface, the "-nameopt" option could be introduded. See the manual
388109998Smarkmpage of the "openssl x509" commandline tool for details. The old behaviour
389109998Smarkmhas however been left as default for the sake of compatibility.
390109998Smarkm
391160814Ssimon* What is a "128 bit certificate"? Can I create one with OpenSSL?
392160814Ssimon
393160814SsimonThe term "128 bit certificate" is a highly misleading marketing term. It does
394160814Ssimon*not* refer to the size of the public key in the certificate! A certificate
395160814Ssimoncontaining a 128 bit RSA key would have negligible security.
396160814Ssimon
397160814SsimonThere were various other names such as "magic certificates", "SGC
398160814Ssimoncertificates", "step up certificates" etc.
399160814Ssimon
400160814SsimonYou can't generally create such a certificate using OpenSSL but there is no
401160814Ssimonneed to any more. Nowadays web browsers using unrestricted strong encryption
402160814Ssimonare generally available.
403160814Ssimon
404160814SsimonWhen there were tight export restrictions on the export of strong encryption
405160814Ssimonsoftware from the US only weak encryption algorithms could be freely exported
406160814Ssimon(initially 40 bit and then 56 bit). It was widely recognised that this was
407160814Ssimoninadequate. A relaxation the rules allowed the use of strong encryption but
408160814Ssimononly to an authorised server.
409160814Ssimon
410160814SsimonTwo slighly different techniques were developed to support this, one used by
411160814SsimonNetscape was called "step up", the other used by MSIE was called "Server Gated
412160814SsimonCryptography" (SGC). When a browser initially connected to a server it would
413160814Ssimoncheck to see if the certificate contained certain extensions and was issued by
414160814Ssimonan authorised authority. If these test succeeded it would reconnect using
415160814Ssimonstrong encryption.
416160814Ssimon
417160814SsimonOnly certain (initially one) certificate authorities could issue the
418160814Ssimoncertificates and they generally cost more than ordinary certificates.
419160814Ssimon
420160814SsimonAlthough OpenSSL can create certificates containing the appropriate extensions
421160814Ssimonthe certificate would not come from a permitted authority and so would not
422160814Ssimonbe recognized.
423160814Ssimon
424160814SsimonThe export laws were later changed to allow almost unrestricted use of strong
425160814Ssimonencryption so these certificates are now obsolete.
426160814Ssimon
427160814Ssimon
42876866Skris[BUILD] =======================================================================
42976866Skris
43059191Skris* Why does the linker complain about undefined symbols?
43159191Skris
43259191SkrisMaybe the compilation was interrupted, and make doesn't notice that
43359191Skrissomething is missing.  Run "make clean; make".
43459191Skris
43559191SkrisIf you used ./Configure instead of ./config, make sure that you
43659191Skrisselected the right target.  File formats may differ slightly between
43759191SkrisOS versions (for example sparcv8/sparcv9, or a.out/elf).
43859191Skris
43959191SkrisIn case you get errors about the following symbols, use the config
44059191Skrisoption "no-asm", as described in INSTALL:
44159191Skris
44259191Skris BF_cbc_encrypt, BF_decrypt, BF_encrypt, CAST_cbc_encrypt,
44359191Skris CAST_decrypt, CAST_encrypt, RC4, RC5_32_cbc_encrypt, RC5_32_decrypt,
44459191Skris RC5_32_encrypt, bn_add_words, bn_div_words, bn_mul_add_words,
44559191Skris bn_mul_comba4, bn_mul_comba8, bn_mul_words, bn_sqr_comba4,
44659191Skris bn_sqr_comba8, bn_sqr_words, bn_sub_words, des_decrypt3,
44759191Skris des_ede3_cbc_encrypt, des_encrypt, des_encrypt2, des_encrypt3,
44859191Skris des_ncbc_encrypt, md5_block_asm_host_order, sha1_block_asm_data_order
44959191Skris
45059191SkrisIf none of these helps, you may want to try using the current snapshot.
45159191SkrisIf the problem persists, please submit a bug report.
45259191Skris
45359191Skris
45476866Skris* Why does the OpenSSL test fail with "bc: command not found"?
45559191Skris
45676866SkrisYou didn't install "bc", the Unix calculator.  If you want to run the
45776866Skristests, get GNU bc from ftp://ftp.gnu.org or from your OS distributor.
45859191Skris
45959191Skris
46076866Skris* Why does the OpenSSL test fail with "bc: 1 no implemented"?
46159191Skris
46276866SkrisOn some SCO installations or versions, bc has a bug that gets triggered
46376866Skriswhen you run the test suite (using "make test").  The message returned is
46476866Skris"bc: 1 not implemented".
46559191Skris
46676866SkrisThe best way to deal with this is to find another implementation of bc
46776866Skrisand compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
46876866Skrisfor download instructions) can be safely used, for example.
46976866Skris
47076866Skris
471109998Smarkm* Why does the OpenSSL test fail with "bc: stack empty"?
472109998Smarkm
473109998SmarkmOn some DG/ux versions, bc seems to have a too small stack for calculations
474109998Smarkmthat the OpenSSL bntest throws at it.  This gets triggered when you run the
475109998Smarkmtest suite (using "make test").  The message returned is "bc: stack empty".
476109998Smarkm
477109998SmarkmThe best way to deal with this is to find another implementation of bc
478109998Smarkmand compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
479109998Smarkmfor download instructions) can be safely used, for example.
480109998Smarkm
481109998Smarkm
48289837Skris* Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
48376866Skris
48489837SkrisOn some Alpha installations running Tru64 Unix and Compaq C, the compilation
48576866Skrisof crypto/sha/sha_dgst.c fails with the message 'Fatal:  Insufficient virtual
48676866Skrismemory to continue compilation.'  As far as the tests have shown, this may be
48776866Skrisa compiler bug.  What happens is that it eats up a lot of resident memory
48876866Skristo build something, probably a table.  The problem is clearly in the
48976866Skrisoptimization code, because if one eliminates optimization completely (-O0),
49076866Skristhe compilation goes through (and the compiler consumes about 2MB of resident
49176866Skrismemory instead of 240MB or whatever one's limit is currently).
49276866Skris
49376866SkrisThere are three options to solve this problem:
49476866Skris
49576866Skris1. set your current data segment size soft limit higher.  Experience shows
49676866Skristhat about 241000 kbytes seems to be enough on an AlphaServer DS10.  You do
49776866Skristhis with the command 'ulimit -Sd nnnnnn', where 'nnnnnn' is the number of
49876866Skriskbytes to set the limit to.
49976866Skris
50076866Skris2. If you have a hard limit that is lower than what you need and you can't
50176866Skrisget it changed, you can compile all of OpenSSL with -O0 as optimization
50276866Skrislevel.  This is however not a very nice thing to do for those who expect to
50376866Skrisget the best result from OpenSSL.  A bit more complicated solution is the
50476866Skrisfollowing:
50576866Skris
50676866Skris----- snip:start -----
507160814Ssimon  make DIRS=crypto SDIRS=sha "`grep '^CFLAG=' Makefile.ssl | \
50876866Skris       sed -e 's/ -O[0-9] / -O0 /'`"
50976866Skris  rm `ls crypto/*.o crypto/sha/*.o | grep -v 'sha_dgst\.o'`
51076866Skris  make
51176866Skris----- snip:end -----
51276866Skris
51376866SkrisThis will only compile sha_dgst.c with -O0, the rest with the optimization
51476866Skrislevel chosen by the configuration process.  When the above is done, do the
51576866Skristest and installation and you're set.
51676866Skris
517160814Ssimon3. Reconfigure the toolkit with no-sha0 option to leave out SHA0. It 
518160814Ssimonshould not be used and is not used in SSL/TLS nor any other recognized
519160814Ssimonprotocol in either case.
52076866Skris
521160814Ssimon
52276866Skris* Why does the OpenSSL compilation fail with "ar: command not found"?
52376866Skris
52476866SkrisGetting this message is quite usual on Solaris 2, because Sun has hidden
52576866Skrisaway 'ar' and other development commands in directories that aren't in
52676866Skris$PATH by default.  One of those directories is '/usr/ccs/bin'.  The
52776866Skrisquickest way to fix this is to do the following (it assumes you use sh
52876866Skrisor any sh-compatible shell):
52976866Skris
53076866Skris----- snip:start -----
53176866Skris  PATH=${PATH}:/usr/ccs/bin; export PATH
53276866Skris----- snip:end -----
53376866Skris
53476866Skrisand then redo the compilation.  What you should really do is make sure
53576866Skris'/usr/ccs/bin' is permanently in your $PATH, for example through your
53676866Skris'.profile' (again, assuming you use a sh-compatible shell).
53776866Skris
53876866Skris
53976866Skris* Why does the OpenSSL compilation fail on Win32 with VC++?
54076866Skris
54176866SkrisSometimes, you may get reports from VC++ command line (cl) that it
54276866Skriscan't find standard include files like stdio.h and other weirdnesses.
54376866SkrisOne possible cause is that the environment isn't correctly set up.
544111147SnectarTo solve that problem for VC++ versions up to 6, one should run
545111147SnectarVCVARS32.BAT which is found in the 'bin' subdirectory of the VC++
546111147Snectarinstallation directory (somewhere under 'Program Files').  For VC++
547111147Snectarversion 7 (and up?), which is also called VS.NET, the file is called
548111147SnectarVSVARS32.BAT instead.
549111147SnectarThis needs to be done prior to running NMAKE, and the changes are only
550111147Snectarvalid for the current DOS session.
55176866Skris
55276866Skris
553100936Snectar* What is special about OpenSSL on Redhat?
554100936Snectar
555100936SnectarRed Hat Linux (release 7.0 and later) include a preinstalled limited
556100936Snectarversion of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
557100936Snectaris disabled in this version. The same may apply to other Linux distributions.
558100936SnectarUsers may therefore wish to install more or all of the features left out.
559100936Snectar
560100936SnectarTo do this you MUST ensure that you do not overwrite the openssl that is in
561100936Snectar/usr/bin on your Red Hat machine. Several packages depend on this file,
562100936Snectarincluding sendmail and ssh. /usr/local/bin is a good alternative choice. The
563100936Snectarlibraries that come with Red Hat 7.0 onwards have different names and so are
564100936Snectarnot affected. (eg For Red Hat 7.2 they are /lib/libssl.so.0.9.6b and
565100936Snectar/lib/libcrypto.so.0.9.6b with symlinks /lib/libssl.so.2 and
566100936Snectar/lib/libcrypto.so.2 respectively).
567100936Snectar
568100936SnectarPlease note that we have been advised by Red Hat attempting to recompile the
569100936Snectaropenssl rpm with all the cryptography enabled will not work. All other
570100936Snectarpackages depend on the original Red Hat supplied openssl package. It is also
571100936Snectarworth noting that due to the way Red Hat supplies its packages, updates to
572100936Snectaropenssl on each distribution never change the package version, only the
573100936Snectarbuild number. For example, on Red Hat 7.1, the latest openssl package has
574100936Snectarversion number 0.9.6 and build number 9 even though it contains all the
575100936Snectarrelevant updates in packages up to and including 0.9.6b.
576100936Snectar
577100936SnectarA possible way around this is to persuade Red Hat to produce a non-US
578100936Snectarversion of Red Hat Linux.
579100936Snectar
580100936SnectarFYI: Patent numbers and expiry dates of US patents:
581100936SnectarMDC-2: 4,908,861 13/03/2007
582100936SnectarIDEA:  5,214,703 25/05/2010
583100936SnectarRC5:   5,724,428 03/03/2015
584100936Snectar
585100936Snectar
586109998Smarkm* Why does the OpenSSL compilation fail on MacOS X?
587109998Smarkm
588109998SmarkmIf the failure happens when trying to build the "openssl" binary, with
589109998Smarkma large number of undefined symbols, it's very probable that you have
590109998SmarkmOpenSSL 0.9.6b delivered with the operating system (you can find out by
591109998Smarkmrunning '/usr/bin/openssl version') and that you were trying to build
592109998SmarkmOpenSSL 0.9.7 or newer.  The problem is that the loader ('ld') in
593109998SmarkmMacOS X has a misfeature that's quite difficult to go around.
594109998SmarkmLook in the file PROBLEMS for a more detailed explanation and for possible
595109998Smarkmsolutions.
596109998Smarkm
597109998Smarkm
598100936Snectar* Why does the OpenSSL test suite fail on MacOS X?
599100936Snectar
600100936SnectarIf the failure happens when running 'make test' and the RC4 test fails,
601100936Snectarit's very probable that you have OpenSSL 0.9.6b delivered with the
602100936Snectaroperating system (you can find out by running '/usr/bin/openssl version')
603100936Snectarand that you were trying to build OpenSSL 0.9.6d.  The problem is that
604100936Snectarthe loader ('ld') in MacOS X has a misfeature that's quite difficult to
605100936Snectargo around and has linked the programs "openssl" and the test programs
606100936Snectarwith /usr/lib/libcrypto.dylib and /usr/lib/libssl.dylib instead of the
607100936Snectarlibraries you just built.
608100936SnectarLook in the file PROBLEMS for a more detailed explanation and for possible
609100936Snectarsolutions.
610100936Snectar
611109998Smarkm* Why does the OpenSSL test suite fail in BN_sqr test [on a 64-bit platform]?
612109998Smarkm
613109998SmarkmFailure in BN_sqr test is most likely caused by a failure to configure the
614109998Smarkmtoolkit for current platform or lack of support for the platform in question.
615109998SmarkmRun './config -t' and './apps/openssl version -p'. Do these platform
616109998Smarkmidentifiers match? If they don't, then you most likely failed to run
617109998Smarkm./config and you're hereby advised to do so before filing a bug report.
618109998SmarkmIf ./config itself fails to run, then it's most likely problem with your
619109998Smarkmlocal environment and you should turn to your system administrator (or
620109998Smarkmsimilar). If identifiers match (and/or no alternative identifier is
621109998Smarkmsuggested by ./config script), then the platform is unsupported. There might
622109998Smarkmor might not be a workaround. Most notably on SPARC64 platforms with GNU
623109998SmarkmC compiler you should be able to produce a working build by running
624109998Smarkm'./config -m32'. I understand that -m32 might not be what you want/need,
625109998Smarkmbut the build should be operational. For further details turn to
626109998Smarkm<openssl-dev@openssl.org>.
627109998Smarkm
628109998Smarkm* Why does OpenBSD-i386 build fail on des-586.s with "Unimplemented segment type"?
629109998Smarkm
630109998SmarkmAs of 0.9.7 assembler routines were overhauled for position independence
631109998Smarkmof the machine code, which is essential for shared library support. For
632109998Smarkmsome reason OpenBSD is equipped with an out-of-date GNU assembler which
633109998Smarkmfinds the new code offensive. To work around the problem, configure with
634111147Snectarno-asm (and sacrifice a great deal of performance) or patch your assembler
635111147Snectaraccording to <URL: http://www.openssl.org/~appro/gas-1.92.3.OpenBSD.patch>.
636109998SmarkmFor your convenience a pre-compiled replacement binary is provided at
637111147Snectar<URL: http://www.openssl.org/~appro/gas-1.92.3.static.aout.bin>.
638111147SnectarReportedly elder *BSD a.out platforms also suffer from this problem and
639111147Snectarremedy should be same. Provided binary is statically linked and should be
640111147Snectarworking across wider range of *BSD branches, not just OpenBSD.
641109998Smarkm
642160814Ssimon* Why does the OpenSSL test suite fail in sha512t on x86 CPU?
643160814Ssimon
644160814SsimonIf the test program in question fails withs SIGILL, Illegal Instruction
645160814Ssimonexception, then you more than likely to run SSE2-capable CPU, such as
646160814SsimonIntel P4, under control of kernel which does not support SSE2
647160814Ssimoninstruction extentions. See accompanying INSTALL file and
648160814SsimonOPENSSL_ia32cap(3) documentation page for further information.
649160814Ssimon
650160814Ssimon* Why does compiler fail to compile sha512.c?
651160814Ssimon
652160814SsimonOpenSSL SHA-512 implementation depends on compiler support for 64-bit
653160814Ssimoninteger type. Few elder compilers [ULTRIX cc, SCO compiler to mention a
654160814Ssimoncouple] lack support for this and therefore are incapable of compiling
655160814Ssimonthe module in question. The recommendation is to disable SHA-512 by
656160814Ssimonadding no-sha512 to ./config [or ./Configure] command line. Another
657160814Ssimonpossible alternative might be to switch to GCC.
658160814Ssimon
659160814Ssimon* Test suite still fails, what to do?
660160814Ssimon
661160814SsimonAnother common reason for failure to complete some particular test is
662160814Ssimonsimply bad code generated by a buggy component in toolchain or deficiency
663160814Ssimonin run-time environment. There are few cases documented in PROBLEMS file,
664160814Ssimonconsult it for possible workaround before you beat the drum. Even if you
665160814Ssimondon't find solution or even mention there, do reserve for possibility of
666160814Ssimona compiler bug. Compiler bugs might appear in rather bizarre ways, they
667160814Ssimonnever make sense, and tend to emerge when you least expect them. In order
668160814Ssimonto identify one, drop optimization level, e.g. by editing CFLAG line in
669160814Ssimontop-level Makefile, recompile and re-run the test.
670160814Ssimon
67176866Skris[PROG] ========================================================================
67276866Skris
67376866Skris* Is OpenSSL thread-safe?
67476866Skris
67576866SkrisYes (with limitations: an SSL connection may not concurrently be used
67676866Skrisby multiple threads).  On Windows and many Unix systems, OpenSSL
67776866Skrisautomatically uses the multi-threaded versions of the standard
67876866Skrislibraries.  If your platform is not one of these, consult the INSTALL
67976866Skrisfile.
68076866Skris
68176866SkrisMulti-threaded applications must provide two callback functions to
682162911SsimonOpenSSL by calling CRYPTO_set_locking_callback() and
683162911SsimonCRYPTO_set_id_callback().  This is described in the threads(3)
684162911Ssimonmanpage.
68576866Skris
68659191Skris* I've compiled a program under Windows and it crashes: why?
68759191Skris
68889837SkrisThis is usually because you've missed the comment in INSTALL.W32.
68989837SkrisYour application must link against the same version of the Win32
69089837SkrisC-Runtime against which your openssl libraries were linked.  The
69189837Skrisdefault version for OpenSSL is /MD - "Multithreaded DLL".
69259191Skris
69389837SkrisIf you are using Microsoft Visual C++'s IDE (Visual Studio), in
69489837Skrismany cases, your new project most likely defaulted to "Debug
69589837SkrisSinglethreaded" - /ML.  This is NOT interchangeable with /MD and your
69689837Skrisprogram will crash, typically on the first BIO related read or write
69789837Skrisoperation.
69859191Skris
69989837SkrisFor each of the six possible link stage configurations within Win32,
70089837Skrisyour application must link  against the same by which OpenSSL was
70189837Skrisbuilt.  If you are using MS Visual C++ (Studio) this can be changed
70289837Skrisby:
70389837Skris
704160814Ssimon 1. Select Settings... from the Project Menu.
705160814Ssimon 2. Select the C/C++ Tab.
706160814Ssimon 3. Select "Code Generation from the "Category" drop down list box
707160814Ssimon 4. Select the Appropriate library (see table below) from the "Use
70889837Skris    run-time library" drop down list box.  Perform this step for both
70989837Skris    your debug and release versions of your application (look at the
71089837Skris    top left of the settings panel to change between the two)
71189837Skris
71289837Skris    Single Threaded           /ML        -  MS VC++ often defaults to
71389837Skris                                            this for the release
71489837Skris                                            version of a new project.
71589837Skris    Debug Single Threaded     /MLd       -  MS VC++ often defaults to
71689837Skris                                            this for the debug version
71789837Skris                                            of a new project.
71889837Skris    Multithreaded             /MT
71989837Skris    Debug Multithreaded       /MTd
72089837Skris    Multithreaded DLL         /MD        -  OpenSSL defaults to this.
72189837Skris    Debug Multithreaded DLL   /MDd
72289837Skris
72389837SkrisNote that debug and release libraries are NOT interchangeable.  If you
72489837Skrisbuilt OpenSSL with /MD your application must use /MD and cannot use /MDd.
72589837Skris
726160814SsimonAs per 0.9.8 the above limitation is eliminated for .DLLs. OpenSSL
727160814Ssimon.DLLs compiled with some specific run-time option [we insist on the
728160814Ssimondefault /MD] can be deployed with application compiled with different
729160814Ssimonoption or even different compiler. But there is a catch! Instead of
730160814Ssimonre-compiling OpenSSL toolkit, as you would have to with prior versions,
731160814Ssimonyou have to compile small C snippet with compiler and/or options of
732160814Ssimonyour choice. The snippet gets installed as
733160814Ssimon<install-root>/include/openssl/applink.c and should be either added to
734160814Ssimonyour application project or simply #include-d in one [and only one]
735160814Ssimonof your application source files. Failure to link this shim module
736160814Ssimoninto your application manifests itself as fatal "no OPENSSL_Applink"
737160814Ssimonrun-time error. An explicit reminder is due that in this situation
738160814Ssimon[mixing compiler options] it is as important to add CRYPTO_malloc_init
739160814Ssimonprior first call to OpenSSL.
74089837Skris
74168651Skris* How do I read or write a DER encoded buffer using the ASN1 functions?
74268651Skris
74368651SkrisYou have two options. You can either use a memory BIO in conjunction
744160814Ssimonwith the i2d_*_bio() or d2i_*_bio() functions or you can use the
745160814Ssimoni2d_*(), d2i_*() functions directly. Since these are often the
74668651Skriscause of grief here are some code fragments using PKCS7 as an example:
74768651Skris
748160814Ssimon unsigned char *buf, *p;
749160814Ssimon int len;
75068651Skris
751160814Ssimon len = i2d_PKCS7(p7, NULL);
752160814Ssimon buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */
753160814Ssimon p = buf;
754160814Ssimon i2d_PKCS7(p7, &p);
75568651Skris
75668651SkrisAt this point buf contains the len bytes of the DER encoding of
75768651Skrisp7.
75868651Skris
75968651SkrisThe opposite assumes we already have len bytes in buf:
76068651Skris
761160814Ssimon unsigned char *p;
762160814Ssimon p = buf;
763160814Ssimon p7 = d2i_PKCS7(NULL, &p, len);
76468651Skris
76568651SkrisAt this point p7 contains a valid PKCS7 structure of NULL if an error
76668651Skrisoccurred. If an error occurred ERR_print_errors(bio) should give more
76768651Skrisinformation.
76868651Skris
76968651SkrisThe reason for the temporary variable 'p' is that the ASN1 functions
77068651Skrisincrement the passed pointer so it is ready to read or write the next
77168651Skrisstructure. This is often a cause of problems: without the temporary
77268651Skrisvariable the buffer pointer is changed to point just after the data
77368651Skristhat has been read or written. This may well be uninitialized data
77468651Skrisand attempts to free the buffer will have unpredictable results
77568651Skrisbecause it no longer points to the same address.
77668651Skris
77768651Skris
778142425Snectar* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
779142425Snectar
780142425SnectarThe short answer is yes, because DER is a special case of BER and OpenSSL
781142425SnectarASN1 decoders can process BER.
782142425Snectar
783142425SnectarThe longer answer is that ASN1 structures can be encoded in a number of
784142425Snectardifferent ways. One set of ways is the Basic Encoding Rules (BER) with various
785142425Snectarpermissible encodings. A restriction of BER is the Distinguished Encoding
786142425SnectarRules (DER): these uniquely specify how a given structure is encoded.
787142425Snectar
788142425SnectarTherefore, because DER is a special case of BER, DER is an acceptable encoding
789142425Snectarfor BER.
790142425Snectar
791142425Snectar
79268651Skris* I've tried using <M_some_evil_pkcs12_macro> and I get errors why?
79368651Skris
79468651SkrisThis usually happens when you try compiling something using the PKCS#12
79568651Skrismacros with a C++ compiler. There is hardly ever any need to use the
79668651SkrisPKCS#12 macros in a program, it is much easier to parse and create
79768651SkrisPKCS#12 files using the PKCS12_parse() and PKCS12_create() functions
79868651Skrisdocumented in doc/openssl.txt and with examples in demos/pkcs12. The
79968651Skris'pkcs12' application has to use the macros because it prints out 
80068651Skrisdebugging information.
80168651Skris
80268651Skris
80359191Skris* I've called <some function> and it fails, why?
80459191Skris
80568651SkrisBefore submitting a report or asking in one of the mailing lists, you
80668651Skrisshould try to determine the cause. In particular, you should call
80759191SkrisERR_print_errors() or ERR_print_errors_fp() after the failed call
80868651Skrisand see if the message helps. Note that the problem may occur earlier
80968651Skristhan you think -- you should check for errors after every call where
81068651Skrisit is possible, otherwise the actual problem may be hidden because
81168651Skrissome OpenSSL functions clear the error state.
81259191Skris
81359191Skris
81459191Skris* I just get a load of numbers for the error output, what do they mean?
81559191Skris
81659191SkrisThe actual format is described in the ERR_print_errors() manual page.
81759191SkrisYou should call the function ERR_load_crypto_strings() before hand and
81859191Skristhe message will be output in text form. If you can't do this (for example
81959191Skrisit is a pre-compiled binary) you can use the errstr utility on the error
82059191Skriscode itself (the hex digits after the second colon).
82159191Skris
82259191Skris
82359191Skris* Why do I get errors about unknown algorithms?
82459191Skris
82559191SkrisThis can happen under several circumstances such as reading in an
82659191Skrisencrypted private key or attempting to decrypt a PKCS#12 file. The cause
82759191Skrisis forgetting to load OpenSSL's table of algorithms with
82859191SkrisOpenSSL_add_all_algorithms(). See the manual page for more information.
82959191Skris
83059191Skris
83159191Skris* Why can't the OpenSSH configure script detect OpenSSL?
83259191Skris
83389837SkrisSeveral reasons for problems with the automatic detection exist.
83489837SkrisOpenSSH requires at least version 0.9.5a of the OpenSSL libraries.
83589837SkrisSometimes the distribution has installed an older version in the system
83689837Skrislocations that is detected instead of a new one installed. The OpenSSL
83789837Skrislibrary might have been compiled for another CPU or another mode (32/64 bits).
83889837SkrisPermissions might be wrong.
83959191Skris
84089837SkrisThe general answer is to check the config.log file generated when running
84189837Skristhe OpenSSH configure script. It should contain the detailed information
84289837Skrison why the OpenSSL library was not detected or considered incompatible.
84368651Skris
844120631Snectar
84576866Skris* Can I use OpenSSL's SSL library with non-blocking I/O?
84668651Skris
84776866SkrisYes; make sure to read the SSL_get_error(3) manual page!
84868651Skris
84976866SkrisA pitfall to avoid: Don't assume that SSL_read() will just read from
85076866Skristhe underlying transport or that SSL_write() will just write to it --
85176866Skrisit is also possible that SSL_write() cannot do any useful work until
85276866Skristhere is data to read, or that SSL_read() cannot do anything until it
85376866Skrisis possible to send data.  One reason for this is that the peer may
85476866Skrisrequest a new TLS/SSL handshake at any time during the protocol,
85576866Skrisrequiring a bi-directional message exchange; both SSL_read() and
85676866SkrisSSL_write() will try to continue any pending handshake.
85768651Skris
85868651Skris
85979998Skris* Why doesn't my server application receive a client certificate?
86079998Skris
86179998SkrisDue to the TLS protocol definition, a client will only send a certificate,
86289837Skrisif explicitly asked by the server. Use the SSL_VERIFY_PEER flag of the
86379998SkrisSSL_CTX_set_verify() function to enable the use of client certificates.
86479998Skris
86579998Skris
866109998Smarkm* Why does compilation fail due to an undefined symbol NID_uniqueIdentifier?
867109998Smarkm
868109998SmarkmFor OpenSSL 0.9.7 the OID table was extended and corrected. In earlier
869109998Smarkmversions, uniqueIdentifier was incorrectly used for X.509 certificates.
870109998SmarkmThe correct name according to RFC2256 (LDAP) is x500UniqueIdentifier.
871109998SmarkmChange your code to use the new name when compiling against OpenSSL 0.9.7.
872109998Smarkm
873109998Smarkm
874142425Snectar* I think I've detected a memory leak, is this a bug?
875142425Snectar
876142425SnectarIn most cases the cause of an apparent memory leak is an OpenSSL internal table
877142425Snectarthat is allocated when an application starts up. Since such tables do not grow
878142425Snectarin size over time they are harmless.
879142425Snectar
880142425SnectarThese internal tables can be freed up when an application closes using various
881160814Ssimonfunctions.  Currently these include following:
882142425Snectar
883160814SsimonThread-local cleanup functions:
884142425Snectar
885160814Ssimon  ERR_remove_state()
886160814Ssimon
887160814SsimonApplication-global cleanup functions that are aware of usage (and therefore
888160814Ssimonthread-safe):
889160814Ssimon
890160814Ssimon  ENGINE_cleanup() and CONF_modules_unload()
891160814Ssimon
892160814Ssimon"Brutal" (thread-unsafe) Application-global cleanup functions:
893160814Ssimon
894160814Ssimon  ERR_free_strings(), EVP_cleanup() and CRYPTO_cleanup_all_ex_data().
895160814Ssimon
896160814Ssimon
89776866Skris===============================================================================
89868651Skris
899