Giter VIP home page Giter VIP logo

oatpp-openssl's Introduction

oatpp-openssl Build Status

This submodule provides secure server and client connection providers for oatpp applications. Based on OpenSSL.

More about oat++:

Requires

OpenSSL installed.

Create server connection provider

#include "oatpp-openssl/server/ConnectionProvider.hpp"
#include "oatpp-openssl/Config.hpp"

...

const char* pemFile = "path/to/file.pem";
const char* crtFile = "path/to/file.crt";

auto config = oatpp::openssl::Config::createDefaultServerConfigShared(pemFile, crtFile);
auto connectionProvider = oatpp::openssl::server::ConnectionProvider::createShared(config, {"localhost", 443});

Create client connection provider

#include "oatpp-openssl/client/ConnectionProvider.hpp"
#include "oatpp-openssl/Config.hpp"
#include "oatpp-openssl/configurer/TrustStore.hpp"

...

const char* trust = "path/to/truststore";

auto config = oatpp::openssl::Config::createDefaultClientConfigShared();
config->addContextConfigurer(std::make_shared<oatpp::openssl::configurer::TrustStore>(trust, nullptr));
auto connectionProvider = oatpp::openssl::client::ConnectionProvider::createShared(config, {"httpbin.org", 443});

oatpp-openssl's People

Contributors

arnoldgeels avatar dipit2007 avatar fwh-dc avatar ksk- avatar ktnr avatar lganzzzo avatar mhaselmaier avatar sgallou avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

oatpp-openssl's Issues

Curl backend works, Oatpp backend fails to parse headers

This produces the output I expect to see:

#include <iostream>

#include "oatpp/web/client/ApiClient.hpp"
#include "oatpp/core/macro/codegen.hpp"

#include OATPP_CODEGEN_BEGIN(ApiClient) ///< Begin code-gen section

class MyApiClient : public oatpp::web::client::ApiClient {

  API_CLIENT_INIT(MyApiClient)

  API_CALL("GET", "/api/markets", getMarkets)

};

#include OATPP_CODEGEN_END(ApiClient) ///< End code-gen section

#include "oatpp/web/client/HttpRequestExecutor.hpp"
#include "oatpp/core/base/StrBuffer.hpp"
#include "oatpp/core/Types.hpp"
#include "oatpp-openssl/client/ConnectionProvider.hpp"
#include "oatpp-openssl/Config.hpp"
#include "oatpp-openssl/Callbacks.hpp"
#include "oatpp-curl/RequestExecutor.hpp"
#include <csignal>

using namespace oatpp::network;
using namespace oatpp::web;
using namespace oatpp::parser;

int main() {
    oatpp::openssl::Callbacks::setDefaultCallbacks();
    std::signal(SIGPIPE, SIG_IGN);

    /* create connection provider */
    auto config = oatpp::openssl::Config::createShared();
    auto connectionProvider = oatpp::openssl::client::ConnectionProvider::createShared(config,
            {"ftx.com", 443});

    //auto requestExecutor = client::HttpRequestExecutor::createShared(connectionProvider);
    auto requestExecutor = oatpp::curl::RequestExecutor::createShared("https://ftx.com");

    auto client = MyApiClient::createShared(requestExecutor, NULL);
    auto response = client->getMarkets();
    std::cout << response->getStatusCode() << std::endl;
    std::cout << response->readBodyToString()->std_str() << std::endl;
    return EXIT_SUCCESS;
}

Now comment out the curl-backed requestExecutor and uncomment auto requestExecutor = client::HttpRequestExecutor::createShared(connectionProvider);, running it again produces this error:

terminate called after throwing an instance of 'oatpp::web::client::RequestExecutor::RequestExecutionError'
  what():  [oatpp::web::client::HttpRequestExecutor::executeOnce()]: Failed to read response.
./data_feed.sh: line 20: 21490 Aborted                 (core dumped)

It appears to be this failure to read the headers.

does not compile on modern MinGW

2023-12-03T01:33:55.2435786Z ../../../../wrapdb/wrapdb/subprojects/oatpp-openssl-1.3.0/test/oatpp-openssl/FullAsyncTest.cpp:78:77: error: expected unqualified-id
2023-12-03T01:33:55.2437368Z    78 |       OATPP_COMPONENT(std::shared_ptr<oatpp::network::virtual_::Interface>, interface);
2023-12-03T01:33:55.2438306Z       |                                                                             ^
2023-12-03T01:33:55.2439372Z D:/a/_temp/msys64/clang32/include/rpc.h:12:19: note: expanded from macro 'interface'
2023-12-03T01:33:55.2440240Z    12 | #define interface struct
2023-12-03T01:33:55.2440694Z       |                   ^
2023-12-03T01:33:55.2441943Z ../../../../wrapdb/wrapdb/subprojects/oatpp-openssl-1.3.0/test/oatpp-openssl/FullAsyncTest.cpp:79:91: error: expected expression
2023-12-03T01:33:55.2443683Z    79 |       streamProvider = oatpp::network::virtual_::server::ConnectionProvider::createShared(interface);
2023-12-03T01:33:55.2444720Z       |                                                                                           ^
2023-12-03T01:33:55.2445783Z D:/a/_temp/msys64/clang32/include/rpc.h:12:19: note: expanded from macro 'interface'
2023-12-03T01:33:55.2446647Z    12 | #define interface struct
2023-12-03T01:33:55.2447099Z       |                   ^
2023-12-03T01:33:55.2448377Z ../../../../wrapdb/wrapdb/subprojects/oatpp-openssl-1.3.0/test/oatpp-openssl/FullAsyncTest.cpp:111:77: error: expected unqualified-id
2023-12-03T01:33:55.2449963Z   111 |       OATPP_COMPONENT(std::shared_ptr<oatpp::network::virtual_::Interface>, interface);
2023-12-03T01:33:55.2450886Z       |                                                                             ^
2023-12-03T01:33:55.2451932Z D:/a/_temp/msys64/clang32/include/rpc.h:12:19: note: expanded from macro 'interface'
2023-12-03T01:33:55.2452797Z    12 | #define interface struct
2023-12-03T01:33:55.2453245Z       |                   ^
2023-12-03T01:33:55.2454493Z ../../../../wrapdb/wrapdb/subprojects/oatpp-openssl-1.3.0/test/oatpp-openssl/FullAsyncTest.cpp:112:91: error: expected expression
2023-12-03T01:33:55.2456239Z   112 |       streamProvider = oatpp::network::virtual_::client::ConnectionProvider::createShared(interface);
2023-12-03T01:33:55.2457289Z       |                                                                                           ^
2023-12-03T01:33:55.2458340Z D:/a/_temp/msys64/clang32/include/rpc.h:12:19: note: expanded from macro 'interface'
2023-12-03T01:33:55.2459209Z    12 | #define interface struct

rpc.h has a definition of interface that needs to be undefined.

I got this error during build

>------ Build All started: Project: oatpp-openssl, Configuration: x64-Debug ------
  [1/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\client\ConnectionProvider.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\client\ConnectionProvider.cpp
  FAILED: src/CMakeFiles/oatpp-openssl.dir/oatpp-openssl/client/ConnectionProvider.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\client\ConnectionProvider.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\client\ConnectionProvider.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\Config.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [2/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\tests.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\tests.cpp
  FAILED: test/CMakeFiles/module-tests.dir/oatpp-openssl/tests.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\tests.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\tests.cpp
C:\Users\GL553VD\Source\Repos\oatpp-openssl\test\oatpp-openssl\tests.cpp(24): error C2065: 'SIGPIPE': undeclared identifier
  [3/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\Config.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\Config.cpp
  FAILED: src/CMakeFiles/oatpp-openssl.dir/oatpp-openssl/Config.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\Config.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\Config.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\Config.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [4/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\server\ConnectionProvider.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\server\ConnectionProvider.cpp
  FAILED: src/CMakeFiles/oatpp-openssl.dir/oatpp-openssl/server/ConnectionProvider.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\server\ConnectionProvider.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\server\ConnectionProvider.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\Config.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [5/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\Connection.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\Connection.cpp
  FAILED: src/CMakeFiles/oatpp-openssl.dir/oatpp-openssl/Connection.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\Connection.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\Connection.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\TLSObject.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [6/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\TLSObject.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\TLSObject.cpp
  FAILED: src/CMakeFiles/oatpp-openssl.dir/oatpp-openssl/TLSObject.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\TLSObject.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\TLSObject.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\TLSObject.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [7/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP  -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fosrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl\Callbacks.cpp.obj /Fdsrc\CMakeFiles\oatpp-openssl.dir\oatpp-openssl.pdb /FS -c ..\..\..\src\oatpp-openssl\Callbacks.cpp
  [8/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\FullAsyncClientTest.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\FullAsyncClientTest.cpp
  FAILED: test/CMakeFiles/module-tests.dir/oatpp-openssl/FullAsyncClientTest.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\FullAsyncClientTest.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\FullAsyncClientTest.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\Config.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [9/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\FullAsyncTest.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\FullAsyncTest.cpp
  FAILED: test/CMakeFiles/module-tests.dir/oatpp-openssl/FullAsyncTest.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\FullAsyncTest.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\FullAsyncTest.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\Config.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  [10/12] C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\FullTest.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\FullTest.cpp
  FAILED: test/CMakeFiles/module-tests.dir/oatpp-openssl/FullTest.cpp.obj 
  C:\PROGRA~2\MICROS~4\2019\ENTERP~1\VC\Tools\MSVC\1424~1.283\bin\HostX64\x64\cl.exe  /nologo /TP -DCERT_CRT_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_cert.crt\" -DCERT_PEM_PATH=\"C:/Users/GL553VD/source/repos/oatpp-openssl/test/../utility/cert/test_key.pem\" -I..\..\..\test -I..\..\..\src -IC:\Users\GL553VD\source\repos\oatpp\out\install\x64-Debug\include\oatpp-1.0.0\oatpp -I"C:\Program Files (x86)\OpenSSL-Win32\include" /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /Fotest\CMakeFiles\module-tests.dir\oatpp-openssl\FullTest.cpp.obj /Fdtest\CMakeFiles\module-tests.dir\ /FS -c ..\..\..\test\oatpp-openssl\FullTest.cpp
C:\Users\GL553VD\source\repos\oatpp-openssl\src\oatpp-openssl\Config.hpp(30): fatal error C1083: Cannot open include file: 'tls.h': No such file or directory
  ninja: build stopped: subcommand failed.

Build All failed.

Install on Windows

By @AlexandreHURDYK:

Ok I managed to compile that submodule on windows through trial and error. Here's my procedure :
As a prerequisite, you'll need the following things :

The OpenSSL header files, along with the libcrypto.lib and libssl.lib libraries.
A compiled installation of oatpp on "C:\Program Files (x86)\oatpp".

  • Create a directory where you want which will contain your stuff.

  • Launch the Windows console in administrator mode, go inside your directory.

  • $ git clone https://github.com/oatpp/oatpp-openssl.git

  • Create a directory somewhere else to put your OpenSSL files. I'd avoid putting these in the cloned repository however.

  • Inside your new directory, do the following :

    • Put libcrypto.lib and libssl.lib inside of that directory.
    • Create a new directory called "openssl" : this is very important, the name HAS to be openssl because the cmake seeks for headers inside a directory called "openssl". Otherwise, you will trigger a compilation error about defining the OPENSSL_ROOT_DIR variable, which is actually a dud.
    • Put all your include files in this new "openssl" directory.
  • Do the following console commands :

    $ cd oatpp-openssl
    $ MD build
    $ cd build
  • Do this command :

    cmake .. -DOPENSSL_ROOT_DIR={path to openssl libs} -DOPENSSL_INCLUDE_DIR={paths to openssl libs}

The -DOPENSSL variables are the parts you want to pay attention to. Creating a new environment variable actually somehow doesn't work on windows. You need to add and fill these two variables in your cmake command to valid it.
Both have the path to your openssl libs : that's not a typo. Your includes directory should be located in the same directory as your libraries, under the name "openssl" so the cmake script will actually find them.

  • Execute the following command:
    • For a debug build:

      $ cmake --build . --target INSTALL
    • For a release build:

      $ cmake --build . --target INSTALL --config Release
      ```โ€‹
      

Access to OpenSSL Context

As far as I'm aware there is currently no way to access the information of the client certificate using oatpp-openssl.
However, it could be easily available if oatpp::openssl::Connection would provide a getter for the OpenSSL context.

Would you be open to add such a getter?
Users could then e.g. implement a oatpp::web::server::interceptor::RequestInterceptor and dynamic_cast the request->getConnection() to oatpp::openssl::Connection and access the OpenSSL context to retrieve any available information.

Can't connect to web server via this module

Hi,

I'd like to create a web server with https, so I use this module as the following step:

Step1: use oatpp-openssl library to create a connection provider component in AppComponent.cpp:

  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::openssl::server::ConnectionProvider>, serverConnectionProvider)
  ([] {
    const char* serverCertificateFile = "./cert/self-signed/host.crt";
    const char* serverPrivateKeyFile = "./cert/self-signed/host.key";

    auto config = oatpp::openssl::Config::createDefaultServerConfigShared(serverCertificateFile, serverPrivateKeyFile);
    auto connectionProvider = oatpp::openssl::server::ConnectionProvider::createShared(config, {"0.0.0.0", 8443});
    return connectionProvider;
  }());

Step2: create server in the App.cpp

  /* Get connection handler component */
  OATPP_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, connectionHandler, "https");

  // Get connection provider component (https)
  OATPP_COMPONENT(std::shared_ptr<oatpp::openssl::server::ConnectionProvider>, connectionProvider);

  // Create server which takes provided TCP connections and passes them to HTTPS connection handler
  oatpp::network::Server server(connectionProvider, connectionHandler);

After that, I can connect to the server at localhost, but I cannot use the other PC to connect this server via the host IP

Is there any suggestion?

BTW, If I use HTTP to create the connection provider, It works

  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, serverConnectionProvider)
  ([] {
     return oatpp::network::tcp::server::ConnectionProvider::createShared(
         {"0.0.0.0", 8080, oatpp::network::Address::IP_4});
  }());

Is there an "example-openssl" project?

Hi,

I'd like to use OpenSSL to replace Libressl
but I cannot find the right way to integrate oatpp-openssl module into my oat++ project
is there any example project just like https://github.com/oatpp/example-libressl??

  • AppComponent.hpp
  #include "oatpp-openssl/Config.hpp"
  #include "oatpp-openssl/server/ConnectionProvider.hpp"
...
  /**
   *  Create ConnectionProvider component which listens on the port 8443 (https)
   */
  OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::openssl::server::ConnectionProvider>, serverConnectionProvider)
  ([] {
    const char* crtFile = "cert/test_cert.crt";
    const char* pemFile = "cert/test_key.pem";

    auto config = oatpp::openssl::Config::createDefaultServerConfigShared(pemFile, crtFile);
    auto connectionProvider = oatpp::openssl::server::ConnectionProvider::createShared(config, {"localhost", 8443});
    return connectionProvider;
  }());
...
  • App.cpp
  // Get connection provider component (https)
  OATPP_COMPONENT(std::shared_ptr<oatpp::openssl::server::ConnectionProvider>, connectionProvider);

And I got the following compiling errors

...
../http_server/lib/win64/liboatpp-openssl.a(ConnectionProvider.cpp.obj):ConnectionProvider.cpp:(.text$_ZN9__gnu_cxx13new_allocatorIN5oatpp7network3tcp6server18ConnectionProviderEE9constructIS5_JRKNS2_7AddressERbEEEvPT_DpOT0_[_ZN9__gnu_cxx13new_allocatorIN5oatpp7network3tcp6server18ConnectionProviderEE9constructIS5_JRKNS2_7AddressERbEEEvPT_DpOT0_]+0x5c): undefined reference to `oatpp::network::tcp::server::ConnectionProvider::ConnectionProvider(oatpp::network::Address const&, bool)'
../http_server/lib/win64/liboatpp-openssl.a(ConnectionProvider.cpp.obj):ConnectionProvider.cpp:(.rdata$.refptr._ZN5oatpp7network18ConnectionProvider13PROPERTY_PORTE[.refptr._ZN5oatpp7network18ConnectionProvider13PROPERTY_PORTE]+0x0): undefined reference to `oatpp::network::ConnectionProvider::PROPERTY_PORT'
../http_server/lib/win64/liboatpp-openssl.a(ConnectionProvider.cpp.obj):ConnectionProvider.cpp:(.rdata$.refptr._ZN5oatpp7network18ConnectionProvider13PROPERTY_HOSTE[.refptr._ZN5oatpp7network18ConnectionProvider13PROPERTY_HOSTE]+0x0): undefined reference to `oatpp::network::ConnectionProvider::PROPERTY_HOST'
...

thank you :)

Relase

Hi @lganzzzo,
could you create relase? After that I'll create conan's recipe.

Application is getting coredumped.

We have enabled the SSL using oatpp-openssl (1.3.0) in our application server. Now if we make a rest call using https then it is running fine but if we accidently uses http , our application is generating core-dump with below console log:-
** D |2023-07-14 13:45:48 1689342348523440| Server:Running on port 8443...
E |2023-07-14 13:45:51 1689342351111992| [oatpp::openssl::Connection::ConnectionContext::init()]:40F6A4DC5E7F0000:error:0A00010B:SSL routines:ssl3_get_record:wrong version number:../ssl/record/ssl3_record.c:354:

terminate called after throwing an instance of 'std::runtime_error'
what(): [oatpp::openssl::Connection::ConnectionContext::init()]: Error. Handshake failed.
Aborted (core dumped)
**

Link problem for openssl 1.1.1.k

Firstly, for openssl 1.1.1, the SSLv23_method should be changed to TLS_method. But there is still link problem even when building the test suites in the release package:
[100%] Linking CXX executable module-tests ../src/liboatpp-openssl.a(Connection.cpp.o): In function oatpp::openssl::Connection::ConnectionContext::init()': Connection.cpp:(.text+0xc8): undefined reference to SSL_state' ../src/liboatpp-openssl.a(Connection.cpp.o): In function oatpp::openssl::Connection::ConnectionContext::initAsync()::HandshakeCoroutine::act()': Connection.cpp:(.text+0x32f): undefined reference to SSL_state' collect2: error: ld returned 1 exit status make[2]: *** [test/CMakeFiles/module-tests.dir/build.make:152: test/module-tests] Error 1 make[1]: *** [CMakeFiles/Makefile2:142: test/CMakeFiles/module-tests.dir/all] Error 2 make: *** [Makefile:146: all] Error 2
It is very strange that there is no definition of SSL_state in the openssl.

Static Linking Against OpenSSL on Windows x86

I'm trying to build oatpp-openssl out of the box, statically linking against OpenSSL (1.1.1j).

git clone https://github.com/oatpp/oatpp-openssl.git
mkdir oatpp-openssl\build & cd oatpp-openssl\build
cmake .. -G "Visual Studio 15 2017" "-DCMAKE_PREFIX_PATH=c:\PATH\TO\OATPP_RUNTIME" "-DOPENSSL_ROOT_DIR=C:\PATH\TO\OPENSSL\openssl\static"
cmake --build . --config RelWithDebInfo

The build goes as expected until link time.

"C:\TEST_BUILD_DIR\oatpp-openssl\build\ALL_BUILD.vcxproj" (default target) (1) ->
"C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj" (default target) (3) ->
(Link target) -> 
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertOpenStore@20 referenced in function _capi_open_store [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertCloseStore@8 referenced in function _capi_find_key [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertEnumCertificatesInStore@8 referenced in function _capi_find_cert [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertFindCertificateInStore@24 referenced in function _capi_find_cert [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertDuplicateCertificateContext@4 referenced in function _capi_load_ssl_client_cert [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertFreeCertificateContext@4 referenced in function _capi_dsa_free [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  libcrypto.lib(e_capi.obj) : error LNK2019: unresolved external symbol __imp__CertGetCertificateContextProperty@16 referenced in function _capi_cert_get_fname [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]
  C:\TEST_BUILD_DIR\oatpp-openssl\build\test\RelWithDebInfo\module-tests.exe : fatal error LNK1120: 7 unresolved externals [C:\TEST_BUILD_DIR\oatpp-openssl\build\test\module-tests.vcxproj]

These functions are defined (in Windows) in Crypt32.lib.

I can fix this issue on my system by

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index aa10867..ca373ce 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -38,6 +38,7 @@ target_include_directories(${OATPP_THIS_MODULE_NAME}
 target_link_libraries(${OATPP_THIS_MODULE_NAME}
         PUBLIC OpenSSL::SSL
         PUBLIC OpenSSL::Crypto
+        Crypt32
 )
 
 #######################################################################################################

However, I doubt that this is the correct solution, because it is likely only needed

  • on Windows
  • when linking statically against OpenSSL

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.