2017-11-22 6 views
7

아파치가 인바운드 SSL 연결을 허용하는 것에 대한 질문이 아닙니다.어떻게 아파치 2 httpd 아파치에서 아웃 바운드 SSL 연결에 우분투의 CA 인증서를 사용합니까?

아웃 바운드 SSL 연결을해야하는 apache 모듈이 있습니다.

Failed to send events: The OpenSSL library reported an error: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed:s3_clnt.c:1269:

이 아파치 내 모듈에 연결을 시도하는 서버의 (유효) 인증서에 대해 알고하지 않습니다 사용하는 SSL 라이브러리를 나타내는 : 그것은 시도 할 때이 오류를 가져옵니다 .

내 우분투 시스템의 CA 인증서가 제대로 실행되고 있으며이 다운 스트림 인증서에 대해 알고 있습니다. openssl s_client은 모든 것이 정상이라고 알려줍니다.

우분투의 시스템 CA 인증서를 사용하여 아웃 바운드 연결을 사용하도록 Apache2에 지시하려면 어떻게합니까?

업데이트 - 인증서를로드하려는 위치를 확인하기 위해 strace -e open httpd -X을 수행했습니다. 나는 libssl.so를 여는 아파치를 본다, 그러나 보통의 ssl.cnf 또는 어떤 인증서 파일을 열려고 시도하는 것을 보지 않는다.

snipped useless strace output

갱신 2 : 내가 HTTPS 요청을 만드는거야 방법으로 - 내 사용자 정의 아파치 모듈 내부에서 요청을 만들고있어. 연결 코드는 기본적으로 보이는, 그래서 녹에 기록 된 .so를 내 모듈은 같은 :

mod_mine.so에 :

use hyper::Client; 
use hyper_tls::HttpsConnector; 
use tokio_core::reactor::Core; 

let mut core = Core::new()?; 
let handle = core.handle(); 
let client = Client::configure() 
    .connector(HttpsConnector::new(4, &handle)?) 
    .build(&handle); 

//actually a POST, but this gets the same error 
let request = client.get("https://saas.mycompany.io".parse()?); 
let result = core.run(request)?; 
... //process result 
+0

맞춤 모듈을 만들거나 기존 모듈을 사용하고 있습니까? 이 모듈의 이름을 지으실 수 있습니까? –

+0

@TarunLalwani - 맞춤 모듈입니다. 단순히 https를 호출합니다. 독립 실행 형을 실행하면 우분투의 libssl을 사용하여 정상적으로 작동합니다. 어떤 이유로 아파치 내부에서 작동하지 않습니다. – marathon

+0

재현 가능한 최소의 예제로 git repo를 만들 수 있습니까? –

답변

1

내가 나는 그것이 최적 모르겠어요하지만, 작동하는 솔루션을 발견했다.

openSSL은 환경 변수 SSL_CERT_FILE을 사용합니다. 내 아파치 모듈 소스 코드 에서이 설정할 수 있습니다.

use std::env; 
let cert_file = figure_out_cert_path(); //on ubuntu: /etc/ssl/certs/ca-certificates.crt 
env::set_var("SSL_CERT_FILE", cert_file);