1OpenSSL - Frequently Asked Questions 2-------------------------------------- 3 4[MISC] Miscellaneous questions 5 6* Which is the current version of OpenSSL? 7* Where is the documentation? 8* How can I contact the OpenSSL developers? 9* Where can I get a compiled version of OpenSSL? 10* Why aren't tools like 'autoconf' and 'libtool' used? 11* What is an 'engine' version? 12 13[LEGAL] Legal questions 14 15* Do I need patent licenses to use OpenSSL? 16* Can I use OpenSSL with GPL software? 17 18[USER] Questions on using the OpenSSL applications 19 20* Why do I get a "PRNG not seeded" error message? 21* Why do I get an "unable to write 'random state'" error message? 22* How do I create certificates or certificate requests? 23* Why can't I create certificate requests? 24* Why does <SSL program> fail with a certificate verify error? 25* Why can I only use weak ciphers when I connect to a server using OpenSSL? 26* How can I create DSA certificates? 27* Why can't I make an SSL connection using a DSA certificate? 28* How can I remove the passphrase on a private key? 29* Why can't I use OpenSSL certificates with SSL client authentication? 30* Why does my browser give a warning about a mismatched hostname? 31* How do I install a CA certificate into a browser? 32 33[BUILD] Questions about building and testing OpenSSL 34 35* Why does the linker complain about undefined symbols? 36* Why does the OpenSSL test fail with "bc: command not found"? 37* Why does the OpenSSL test fail with "bc: 1 no implemented"? 38* Why does the OpenSSL compilation fail on Alpha Tru64 Unix? 39* Why does the OpenSSL compilation fail with "ar: command not found"? 40* Why does the OpenSSL compilation fail on Win32 with VC++? 41* What is special about OpenSSL on Redhat? 42* Why does the OpenSSL test suite fail on MacOS X? 43 44[PROG] Questions about programming with OpenSSL 45 46* Is OpenSSL thread-safe? 47* I've compiled a program under Windows and it crashes: why? 48* How do I read or write a DER encoded buffer using the ASN1 functions? 49* I've tried using <M_some_evil_pkcs12_macro> and I get errors why? 50* I've called <some function> and it fails, why? 51* I just get a load of numbers for the error output, what do they mean? 52* Why do I get errors about unknown algorithms? 53* Why can't the OpenSSH configure script detect OpenSSL? 54* Can I use OpenSSL's SSL library with non-blocking I/O? 55* Why doesn't my server application receive a client certificate? 56 57=============================================================================== 58 59[MISC] ======================================================================== 60 61* Which is the current version of OpenSSL? 62 63The current version is available from <URL: http://www.openssl.org>. 64OpenSSL 0.9.6g was released on 9 August 2002. 65 66In addition to the current stable release, you can also access daily 67snapshots of the OpenSSL development version at <URL: 68ftp://ftp.openssl.org/snapshot/>, or get it by anonymous CVS access. 69 70 71* Where is the documentation? 72 73OpenSSL is a library that provides cryptographic functionality to 74applications such as secure web servers. Be sure to read the 75documentation of the application you want to use. The INSTALL file 76explains how to install this library. 77 78OpenSSL includes a command line utility that can be used to perform a 79variety of cryptographic functions. It is described in the openssl(1) 80manpage. Documentation for developers is currently being written. A 81few manual pages already are available; overviews over libcrypto and 82libssl are given in the crypto(3) and ssl(3) manpages. 83 84The OpenSSL manpages are installed in /usr/local/ssl/man/ (or a 85different directory if you specified one as described in INSTALL). 86In addition, you can read the most current versions at 87<URL: http://www.openssl.org/docs/>. 88 89For information on parts of libcrypto that are not yet documented, you 90might want to read Ariel Glenn's documentation on SSLeay 0.9, OpenSSL's 91predecessor, at <URL: http://www.columbia.edu/~ariel/ssleay/>. Much 92of this still applies to OpenSSL. 93 94There is some documentation about certificate extensions and PKCS#12 95in doc/openssl.txt 96 97The original SSLeay documentation is included in OpenSSL as 98doc/ssleay.txt. It may be useful when none of the other resources 99help, but please note that it reflects the obsolete version SSLeay 1000.6.6. 101 102 103* How can I contact the OpenSSL developers? 104 105The README file describes how to submit bug reports and patches to 106OpenSSL. Information on the OpenSSL mailing lists is available from 107<URL: http://www.openssl.org>. 108 109 110* Where can I get a compiled version of OpenSSL? 111 112Some applications that use OpenSSL are distributed in binary form. 113When using such an application, you don't need to install OpenSSL 114yourself; the application will include the required parts (e.g. DLLs). 115 116If you want to install OpenSSL on a Windows system and you don't have 117a C compiler, read the "Mingw32" section of INSTALL.W32 for information 118on how to obtain and install the free GNU C compiler. 119 120A number of Linux and *BSD distributions include OpenSSL. 121 122 123* Why aren't tools like 'autoconf' and 'libtool' used? 124 125autoconf will probably be used in future OpenSSL versions. If it was 126less Unix-centric, it might have been used much earlier. 127 128* What is an 'engine' version? 129 130With version 0.9.6 OpenSSL was extended to interface to external crypto 131hardware. This was realized in a special release '0.9.6-engine'. With 132version 0.9.7 (not yet released) the changes were merged into the main 133development line, so that the special release is no longer necessary. 134 135[LEGAL] ======================================================================= 136 137* Do I need patent licenses to use OpenSSL? 138 139The patents section of the README file lists patents that may apply to 140you if you want to use OpenSSL. For information on intellectual 141property rights, please consult a lawyer. The OpenSSL team does not 142offer legal advice. 143 144You can configure OpenSSL so as not to use RC5 and IDEA by using 145 ./config no-rc5 no-idea 146 147 148* Can I use OpenSSL with GPL software? 149 150On many systems including the major Linux and BSD distributions, yes (the 151GPL does not place restrictions on using libraries that are part of the 152normal operating system distribution). 153 154On other systems, the situation is less clear. Some GPL software copyright 155holders claim that you infringe on their rights if you use OpenSSL with 156their software on operating systems that don't normally include OpenSSL. 157 158If you develop open source software that uses OpenSSL, you may find it 159useful to choose an other license than the GPL, or state explicitly that 160"This program is released under the GPL with the additional exemption that 161compiling, linking, and/or using OpenSSL is allowed." If you are using 162GPL software developed by others, you may want to ask the copyright holder 163for permission to use their software with OpenSSL. 164 165 166[USER] ======================================================================== 167 168* Why do I get a "PRNG not seeded" error message? 169 170Cryptographic software needs a source of unpredictable data to work 171correctly. Many open source operating systems provide a "randomness 172device" that serves this purpose. On other systems, applications have 173to call the RAND_add() or RAND_seed() function with appropriate data 174before generating keys or performing public key encryption. 175(These functions initialize the pseudo-random number generator, PRNG.) 176 177Some broken applications do not do this. As of version 0.9.5, the 178OpenSSL functions that need randomness report an error if the random 179number generator has not been seeded with at least 128 bits of 180randomness. If this error occurs, please contact the author of the 181application you are using. It is likely that it never worked 182correctly. OpenSSL 0.9.5 and later make the error visible by refusing 183to perform potentially insecure encryption. 184 185On systems without /dev/urandom and /dev/random, it is a good idea to 186use the Entropy Gathering Demon (EGD); see the RAND_egd() manpage for 187details. Starting with version 0.9.7, OpenSSL will automatically look 188for an EGD socket at /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool and 189/etc/entropy. 190 191Most components of the openssl command line utility automatically try 192to seed the random number generator from a file. The name of the 193default seeding file is determined as follows: If environment variable 194RANDFILE is set, then it names the seeding file. Otherwise if 195environment variable HOME is set, then the seeding file is $HOME/.rnd. 196If neither RANDFILE nor HOME is set, versions up to OpenSSL 0.9.6 will 197use file .rnd in the current directory while OpenSSL 0.9.6a uses no 198default seeding file at all. OpenSSL 0.9.6b and later will behave 199similarly to 0.9.6a, but will use a default of "C:\" for HOME on 200Windows systems if the environment variable has not been set. 201 202If the default seeding file does not exist or is too short, the "PRNG 203not seeded" error message may occur. 204 205The openssl command line utility will write back a new state to the 206default seeding file (and create this file if necessary) unless 207there was no sufficient seeding. 208 209Pointing $RANDFILE to an Entropy Gathering Daemon socket does not work. 210Use the "-rand" option of the OpenSSL command line tools instead. 211The $RANDFILE environment variable and $HOME/.rnd are only used by the 212OpenSSL command line tools. Applications using the OpenSSL library 213provide their own configuration options to specify the entropy source, 214please check out the documentation coming the with application. 215 216For Solaris 2.6, Tim Nibbe <[email protected]> and others have suggested 217installing the SUNski package from Sun patch 105710-01 (Sparc) which 218adds a /dev/random device and make sure it gets used, usually through 219$RANDFILE. There are probably similar patches for the other Solaris 220versions. An official statement from Sun with respect to /dev/random 221support can be found at 222 http://sunsolve.sun.com/pub-cgi/retrieve.pl?doc=fsrdb/27606&zone_32=SUNWski 223However, be warned that /dev/random is usually a blocking device, which 224may have some effects on OpenSSL. 225 226 227* Why do I get an "unable to write 'random state'" error message? 228 229 230Sometimes the openssl command line utility does not abort with 231a "PRNG not seeded" error message, but complains that it is 232"unable to write 'random state'". This message refers to the 233default seeding file (see previous answer). A possible reason 234is that no default filename is known because neither RANDFILE 235nor HOME is set. (Versions up to 0.9.6 used file ".rnd" in the 236current directory in this case, but this has changed with 0.9.6a.) 237 238 239* How do I create certificates or certificate requests? 240 241Check out the CA.pl(1) manual page. This provides a simple wrapper round 242the 'req', 'verify', 'ca' and 'pkcs12' utilities. For finer control check 243out the manual pages for the individual utilities and the certificate 244extensions documentation (currently in doc/openssl.txt). 245 246 247* Why can't I create certificate requests? 248 249You typically get the error: 250 251 unable to find 'distinguished_name' in config 252 problems making Certificate Request 253 254This is because it can't find the configuration file. Check out the 255DIAGNOSTICS section of req(1) for more information. 256 257 258* Why does <SSL program> fail with a certificate verify error? 259 260This problem is usually indicated by log messages saying something like 261"unable to get local issuer certificate" or "self signed certificate". 262When a certificate is verified its root CA must be "trusted" by OpenSSL 263this typically means that the CA certificate must be placed in a directory 264or file and the relevant program configured to read it. The OpenSSL program 265'verify' behaves in a similar way and issues similar error messages: check 266the verify(1) program manual page for more information. 267 268 269* Why can I only use weak ciphers when I connect to a server using OpenSSL? 270 271This is almost certainly because you are using an old "export grade" browser 272which only supports weak encryption. Upgrade your browser to support 128 bit 273ciphers. 274 275 276* How can I create DSA certificates? 277 278Check the CA.pl(1) manual page for a DSA certificate example. 279 280 281* Why can't I make an SSL connection to a server using a DSA certificate? 282 283Typically you'll see a message saying there are no shared ciphers when 284the same setup works fine with an RSA certificate. There are two possible 285causes. The client may not support connections to DSA servers most web 286browsers (including Netscape and MSIE) only support connections to servers 287supporting RSA cipher suites. The other cause is that a set of DH parameters 288has not been supplied to the server. DH parameters can be created with the 289dhparam(1) command and loaded using the SSL_CTX_set_tmp_dh() for example: 290check the source to s_server in apps/s_server.c for an example. 291 292 293* How can I remove the passphrase on a private key? 294 295Firstly you should be really *really* sure you want to do this. Leaving 296a private key unencrypted is a major security risk. If you decide that 297you do have to do this check the EXAMPLES sections of the rsa(1) and 298dsa(1) manual pages. 299 300 301* Why can't I use OpenSSL certificates with SSL client authentication? 302 303What will typically happen is that when a server requests authentication 304it will either not include your certificate or tell you that you have 305no client certificates (Netscape) or present you with an empty list box 306(MSIE). The reason for this is that when a server requests a client 307certificate it includes a list of CAs names which it will accept. Browsers 308will only let you select certificates from the list on the grounds that 309there is little point presenting a certificate which the server will 310reject. 311 312The solution is to add the relevant CA certificate to your servers "trusted 313CA list". How you do this depends on the server software in uses. You can 314print out the servers list of acceptable CAs using the OpenSSL s_client tool: 315 316openssl s_client -connect www.some.host:443 -prexit 317 318If your server only requests certificates on certain URLs then you may need 319to manually issue an HTTP GET command to get the list when s_client connects: 320 321GET /some/page/needing/a/certificate.html 322 323If your CA does not appear in the list then this confirms the problem. 324 325 326* Why does my browser give a warning about a mismatched hostname? 327 328Browsers expect the server's hostname to match the value in the commonName 329(CN) field of the certificate. If it does not then you get a warning. 330 331 332* How do I install a CA certificate into a browser? 333 334The usual way is to send the DER encoded certificate to the browser as 335MIME type application/x-x509-ca-cert, for example by clicking on an appropriate 336link. On MSIE certain extensions such as .der or .cacert may also work, or you 337can import the certificate using the certificate import wizard. 338 339You can convert a certificate to DER form using the command: 340 341openssl x509 -in ca.pem -outform DER -out ca.der 342 343Occasionally someone suggests using a command such as: 344 345openssl pkcs12 -export -out cacert.p12 -in cacert.pem -inkey cakey.pem 346 347DO NOT DO THIS! This command will give away your CAs private key and 348reduces its security to zero: allowing anyone to forge certificates in 349whatever name they choose. 350 351 352[BUILD] ======================================================================= 353 354* Why does the linker complain about undefined symbols? 355 356Maybe the compilation was interrupted, and make doesn't notice that 357something is missing. Run "make clean; make". 358 359If you used ./Configure instead of ./config, make sure that you 360selected the right target. File formats may differ slightly between 361OS versions (for example sparcv8/sparcv9, or a.out/elf). 362 363In case you get errors about the following symbols, use the config 364option "no-asm", as described in INSTALL: 365 366 BF_cbc_encrypt, BF_decrypt, BF_encrypt, CAST_cbc_encrypt, 367 CAST_decrypt, CAST_encrypt, RC4, RC5_32_cbc_encrypt, RC5_32_decrypt, 368 RC5_32_encrypt, bn_add_words, bn_div_words, bn_mul_add_words, 369 bn_mul_comba4, bn_mul_comba8, bn_mul_words, bn_sqr_comba4, 370 bn_sqr_comba8, bn_sqr_words, bn_sub_words, des_decrypt3, 371 des_ede3_cbc_encrypt, des_encrypt, des_encrypt2, des_encrypt3, 372 des_ncbc_encrypt, md5_block_asm_host_order, sha1_block_asm_data_order 373 374If none of these helps, you may want to try using the current snapshot. 375If the problem persists, please submit a bug report. 376 377 378* Why does the OpenSSL test fail with "bc: command not found"? 379 380You didn't install "bc", the Unix calculator. If you want to run the 381tests, get GNU bc from ftp://ftp.gnu.org or from your OS distributor. 382 383 384* Why does the OpenSSL test fail with "bc: 1 no implemented"? 385 386On some SCO installations or versions, bc has a bug that gets triggered 387when you run the test suite (using "make test"). The message returned is 388"bc: 1 not implemented". 389 390The best way to deal with this is to find another implementation of bc 391and compile/install it. GNU bc (see http://www.gnu.org/software/software.html 392for download instructions) can be safely used, for example. 393 394 395* Why does the OpenSSL compilation fail on Alpha Tru64 Unix? 396 397On some Alpha installations running Tru64 Unix and Compaq C, the compilation 398of crypto/sha/sha_dgst.c fails with the message 'Fatal: Insufficient virtual 399memory to continue compilation.' As far as the tests have shown, this may be 400a compiler bug. What happens is that it eats up a lot of resident memory 401to build something, probably a table. The problem is clearly in the 402optimization code, because if one eliminates optimization completely (-O0), 403the compilation goes through (and the compiler consumes about 2MB of resident 404memory instead of 240MB or whatever one's limit is currently). 405 406There are three options to solve this problem: 407 4081. set your current data segment size soft limit higher. Experience shows 409that about 241000 kbytes seems to be enough on an AlphaServer DS10. You do 410this with the command 'ulimit -Sd nnnnnn', where 'nnnnnn' is the number of 411kbytes to set the limit to. 412 4132. If you have a hard limit that is lower than what you need and you can't 414get it changed, you can compile all of OpenSSL with -O0 as optimization 415level. This is however not a very nice thing to do for those who expect to 416get the best result from OpenSSL. A bit more complicated solution is the 417following: 418 419----- snip:start ----- 420 make DIRS=crypto SDIRS=sha "`grep '^CFLAG=' Makefile.ssl | \ 421 sed -e 's/ -O[0-9] / -O0 /'`" 422 rm `ls crypto/*.o crypto/sha/*.o | grep -v 'sha_dgst\.o'` 423 make 424----- snip:end ----- 425 426This will only compile sha_dgst.c with -O0, the rest with the optimization 427level chosen by the configuration process. When the above is done, do the 428test and installation and you're set. 429 430 431* Why does the OpenSSL compilation fail with "ar: command not found"? 432 433Getting this message is quite usual on Solaris 2, because Sun has hidden 434away 'ar' and other development commands in directories that aren't in 435$PATH by default. One of those directories is '/usr/ccs/bin'. The 436quickest way to fix this is to do the following (it assumes you use sh 437or any sh-compatible shell): 438 439----- snip:start ----- 440 PATH=${PATH}:/usr/ccs/bin; export PATH 441----- snip:end ----- 442 443and then redo the compilation. What you should really do is make sure 444'/usr/ccs/bin' is permanently in your $PATH, for example through your 445'.profile' (again, assuming you use a sh-compatible shell). 446 447 448* Why does the OpenSSL compilation fail on Win32 with VC++? 449 450Sometimes, you may get reports from VC++ command line (cl) that it 451can't find standard include files like stdio.h and other weirdnesses. 452One possible cause is that the environment isn't correctly set up. 453To solve that problem, one should run VCVARS32.BAT which is found in 454the 'bin' subdirectory of the VC++ installation directory (somewhere 455under 'Program Files'). This needs to be done prior to running NMAKE, 456and the changes are only valid for the current DOS session. 457 458 459* What is special about OpenSSL on Redhat? 460 461Red Hat Linux (release 7.0 and later) include a preinstalled limited 462version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2 463is disabled in this version. The same may apply to other Linux distributions. 464Users may therefore wish to install more or all of the features left out. 465 466To do this you MUST ensure that you do not overwrite the openssl that is in 467/usr/bin on your Red Hat machine. Several packages depend on this file, 468including sendmail and ssh. /usr/local/bin is a good alternative choice. The 469libraries that come with Red Hat 7.0 onwards have different names and so are 470not affected. (eg For Red Hat 7.2 they are /lib/libssl.so.0.9.6b and 471/lib/libcrypto.so.0.9.6b with symlinks /lib/libssl.so.2 and 472/lib/libcrypto.so.2 respectively). 473 474Please note that we have been advised by Red Hat attempting to recompile the 475openssl rpm with all the cryptography enabled will not work. All other 476packages depend on the original Red Hat supplied openssl package. It is also 477worth noting that due to the way Red Hat supplies its packages, updates to 478openssl on each distribution never change the package version, only the 479build number. For example, on Red Hat 7.1, the latest openssl package has 480version number 0.9.6 and build number 9 even though it contains all the 481relevant updates in packages up to and including 0.9.6b. 482 483A possible way around this is to persuade Red Hat to produce a non-US 484version of Red Hat Linux. 485 486FYI: Patent numbers and expiry dates of US patents: 487MDC-2: 4,908,861 13/03/2007 488IDEA: 5,214,703 25/05/2010 489RC5: 5,724,428 03/03/2015 490 491 492* Why does the OpenSSL test suite fail on MacOS X? 493 494If the failure happens when running 'make test' and the RC4 test fails, 495it's very probable that you have OpenSSL 0.9.6b delivered with the 496operating system (you can find out by running '/usr/bin/openssl version') 497and that you were trying to build OpenSSL 0.9.6d. The problem is that 498the loader ('ld') in MacOS X has a misfeature that's quite difficult to 499go around and has linked the programs "openssl" and the test programs 500with /usr/lib/libcrypto.dylib and /usr/lib/libssl.dylib instead of the 501libraries you just built. 502Look in the file PROBLEMS for a more detailed explanation and for possible 503solutions. 504 505[PROG] ======================================================================== 506 507* Is OpenSSL thread-safe? 508 509Yes (with limitations: an SSL connection may not concurrently be used 510by multiple threads). On Windows and many Unix systems, OpenSSL 511automatically uses the multi-threaded versions of the standard 512libraries. If your platform is not one of these, consult the INSTALL 513file. 514 515Multi-threaded applications must provide two callback functions to 516OpenSSL. This is described in the threads(3) manpage. 517 518 519* I've compiled a program under Windows and it crashes: why? 520 521This is usually because you've missed the comment in INSTALL.W32. 522Your application must link against the same version of the Win32 523C-Runtime against which your openssl libraries were linked. The 524default version for OpenSSL is /MD - "Multithreaded DLL". 525 526If you are using Microsoft Visual C++'s IDE (Visual Studio), in 527many cases, your new project most likely defaulted to "Debug 528Singlethreaded" - /ML. This is NOT interchangeable with /MD and your 529program will crash, typically on the first BIO related read or write 530operation. 531 532For each of the six possible link stage configurations within Win32, 533your application must link against the same by which OpenSSL was 534built. If you are using MS Visual C++ (Studio) this can be changed 535by: 536 5371. Select Settings... from the Project Menu. 5382. Select the C/C++ Tab. 5393. Select "Code Generation from the "Category" drop down list box 5404. Select the Appropriate library (see table below) from the "Use 541 run-time library" drop down list box. Perform this step for both 542 your debug and release versions of your application (look at the 543 top left of the settings panel to change between the two) 544 545 Single Threaded /ML - MS VC++ often defaults to 546 this for the release 547 version of a new project. 548 Debug Single Threaded /MLd - MS VC++ often defaults to 549 this for the debug version 550 of a new project. 551 Multithreaded /MT 552 Debug Multithreaded /MTd 553 Multithreaded DLL /MD - OpenSSL defaults to this. 554 Debug Multithreaded DLL /MDd 555 556Note that debug and release libraries are NOT interchangeable. If you 557built OpenSSL with /MD your application must use /MD and cannot use /MDd. 558 559 560* How do I read or write a DER encoded buffer using the ASN1 functions? 561 562You have two options. You can either use a memory BIO in conjunction 563with the i2d_XXX_bio() or d2i_XXX_bio() functions or you can use the 564i2d_XXX(), d2i_XXX() functions directly. Since these are often the 565cause of grief here are some code fragments using PKCS7 as an example: 566 567unsigned char *buf, *p; 568int len; 569 570len = i2d_PKCS7(p7, NULL); 571buf = OPENSSL_malloc(len); /* or Malloc, error checking omitted */ 572p = buf; 573i2d_PKCS7(p7, &p); 574 575At this point buf contains the len bytes of the DER encoding of 576p7. 577 578The opposite assumes we already have len bytes in buf: 579 580unsigned char *p; 581p = buf; 582p7 = d2i_PKCS7(NULL, &p, len); 583 584At this point p7 contains a valid PKCS7 structure of NULL if an error 585occurred. If an error occurred ERR_print_errors(bio) should give more 586information. 587 588The reason for the temporary variable 'p' is that the ASN1 functions 589increment the passed pointer so it is ready to read or write the next 590structure. This is often a cause of problems: without the temporary 591variable the buffer pointer is changed to point just after the data 592that has been read or written. This may well be uninitialized data 593and attempts to free the buffer will have unpredictable results 594because it no longer points to the same address. 595 596 597* I've tried using <M_some_evil_pkcs12_macro> and I get errors why? 598 599This usually happens when you try compiling something using the PKCS#12 600macros with a C++ compiler. There is hardly ever any need to use the 601PKCS#12 macros in a program, it is much easier to parse and create 602PKCS#12 files using the PKCS12_parse() and PKCS12_create() functions 603documented in doc/openssl.txt and with examples in demos/pkcs12. The 604'pkcs12' application has to use the macros because it prints out 605debugging information. 606 607 608* I've called <some function> and it fails, why? 609 610Before submitting a report or asking in one of the mailing lists, you 611should try to determine the cause. In particular, you should call 612ERR_print_errors() or ERR_print_errors_fp() after the failed call 613and see if the message helps. Note that the problem may occur earlier 614than you think -- you should check for errors after every call where 615it is possible, otherwise the actual problem may be hidden because 616some OpenSSL functions clear the error state. 617 618 619* I just get a load of numbers for the error output, what do they mean? 620 621The actual format is described in the ERR_print_errors() manual page. 622You should call the function ERR_load_crypto_strings() before hand and 623the message will be output in text form. If you can't do this (for example 624it is a pre-compiled binary) you can use the errstr utility on the error 625code itself (the hex digits after the second colon). 626 627 628* Why do I get errors about unknown algorithms? 629 630This can happen under several circumstances such as reading in an 631encrypted private key or attempting to decrypt a PKCS#12 file. The cause 632is forgetting to load OpenSSL's table of algorithms with 633OpenSSL_add_all_algorithms(). See the manual page for more information. 634 635 636* Why can't the OpenSSH configure script detect OpenSSL? 637 638Several reasons for problems with the automatic detection exist. 639OpenSSH requires at least version 0.9.5a of the OpenSSL libraries. 640Sometimes the distribution has installed an older version in the system 641locations that is detected instead of a new one installed. The OpenSSL 642library might have been compiled for another CPU or another mode (32/64 bits). 643Permissions might be wrong. 644 645The general answer is to check the config.log file generated when running 646the OpenSSH configure script. It should contain the detailed information 647on why the OpenSSL library was not detected or considered incompatible. 648 649* Can I use OpenSSL's SSL library with non-blocking I/O? 650 651Yes; make sure to read the SSL_get_error(3) manual page! 652 653A pitfall to avoid: Don't assume that SSL_read() will just read from 654the underlying transport or that SSL_write() will just write to it -- 655it is also possible that SSL_write() cannot do any useful work until 656there is data to read, or that SSL_read() cannot do anything until it 657is possible to send data. One reason for this is that the peer may 658request a new TLS/SSL handshake at any time during the protocol, 659requiring a bi-directional message exchange; both SSL_read() and 660SSL_write() will try to continue any pending handshake. 661 662 663* Why doesn't my server application receive a client certificate? 664 665Due to the TLS protocol definition, a client will only send a certificate, 666if explicitly asked by the server. Use the SSL_VERIFY_PEER flag of the 667SSL_CTX_set_verify() function to enable the use of client certificates. 668 669 670=============================================================================== 671 672