David Acker has patched socat to add OpenSSL FIPS. See http://oss-institute.org/fips-faq.html and http://linuxdevices.com/news/NS4742716157.html for more information. The patch that is integrated into socat 1.5 does the following: Add support for LDFLAGS in Makefile. LDFLAGS can be specified on the configure command line and then will be carried over into the make. Add fips support. Requires OpenSSL 0.9.7j-fips-dev from http://www.openssl.org/source/OpenSSL-fips-1.0.tar.gz built with fips support turned on. use ./Configure fips [os-arc], for example ./Configure fips linux-pentium The LDFLAGS is needed to point a build against a library located in a non-standard location. For example, if you download and build openssl manually, it gets installed in /usr/local/ssl by default. The FIPS support patches involve adding an option to enable/disable fips in configure (enabled by default), checking the system for FIPS support during configure, and then adding a fips option to socats openssl address to turn on fips mode. The openssl binary uses an environment variable instead of a command line flag. FIPS mode requires both a compile time flag of OPENSSL_FIPS and a runtime call of FIPS_mode_set(1). Fips mode requires building with the fipsld script provided by OpenSSL. FIPS tracks the pid of the process that initializes things so after a fork, the child must reinitialize. When the ssl code detects a forks occur and if FIPS mode was enabled, it reinitializes FIPS by disabling and then enabling it again. To produce Davids enviroment, do the following: To build openssl download OpenSSL 0.9.7j-fips-dev from http://www.openssl.org/source/OpenSSL-fips-1.0.tar.gz tar xzf OpenSSL-fips-1.0.tar.gz cd openssl ./Configure fips linux-pentium make make test (become root) make install This leaves an install in /usr/local/ssl To build socat: setup directory with socat 1.5 or higher. cd socat-1.5.0.0 ./configure CPPFLAGS=-I/usr/local/ssl/include/ LDFLAGS=-L/usr/local/ssl/lib/ FIPSLD=/usr/local/ssl/bin/fipsld make (become root) make install To run tests we make sure the new openssl is used: export PATH=/usr/local/ssl/bin:$PATH ./test.sh fips There are two tests in test.sh that depend on fips: OPENSSL_FIPS_BOTHAUTH performs a SSL client to server connection with certificate based authentication in both directions. If it works FIPS mode seems to be ok. OPENSSL_FIPS_SECURITY generates a certificaet/key pair without fips support. It then tries a SSL connection in "normal" mode which is expected to work. In the second phase it uses fips mode with these credentials which is expected to fail. If so, the test succeeded.