Makefile:
OPENSSLDIR = /usr/local/ssl/fips2.0
OPENSSL_INCLUDEDIR = /root/poc/openssl-1.0.2r/include/
FIPSMODULE = $(OPENSSLDIR)/lib/fipscanister.o
CC = /usr/bin/gcc
FIPSLD_CC = $(CC)
FIPSLD = /usr/local/ssl/fips-2.0/bin/fipsld
CC = $(FIPSLD)
OBJS = poc.o
LIBCRYPTO = /root/poc/openssl-1.0.2r/libcrypto.a
LIBSSL = /root/poc/openssl-1.0.2r/libssl.a
libfoo.so:
env FIPSLD_CC=/usr/bin/gcc $(FIPSLD) -fPIC -shared -o libfoo.so foo.c $(LIBCRYPTO) $(LIBSSL) # Working
poc.o:
/usr/bin/gcc -I$(OPENSSL_INCLUDEDIR) -Wall -c poc.c
POC: libfoo.so $(OBJS)
env FIPSLD_CC=/usr/bin/gcc $(FIPSLD) $(OBJS) $(LIBCRYPTO) $(LIBSSL) -L/root/poc -lfoo -ldl -o POC #working
***#/usr/bin/gcc $(OBJS) -L/root/poc -lfoo -ldl -o POC #notworking
#env FIPSLD_CC=/usr/bin/gcc $(FIPSLD) $(OBJS) -L/root/poc -lfoo -ldl -o POC #notworking***
foo.c:用于将fips模式设置为ON的代码,这将是其他应用程序的共享库。
#include <stdio.h>
#include <openssl/evp.h>
#include <openssl/err.h>
int foo_func()
{
int rc, mode;
mode = FIPS_mode();
if(mode == 0)
{
rc = FIPS_mode_set(1); //Enable fips mode
if(rc == 0) {
printf("Failed to enable FIPS mode, ");
printf("%s\n",ERR_error_string(ERR_get_error(),NULL));
} else {
printf("Enabled FIPS mode");
}
}
else
{
printf("Already in FIPS mode");
}
return 0;
}
poc.c:使用libfoo.so来将fips模式设置为ON的应用程序。
#include <stdio.h>
#include "foo.h"
int main(int argc, char* argv[])
{
foo_func(); //Call function of foo.so library.
return 0;
}
我想让#notwoking成为#工作。因为我不想使用openssl库与POC应用程序一起编译。没有该功能,我将无法设置FIPS模式。
如何将openssl库链接到共享库(libfoo.so),并使用libfoo.so编译我的应用程序(POC)并成功设置FIPS模式。