使用具有FIPS功能的openssl编译应用程序

时间:2019-11-19 08:58:20

标签: c openssl

Makefile:

OPENSSLDIR = /usr/local/ssl/fips­2.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模式。

0 个答案:

没有答案