2017-11-22 128 views
7

Not: Bu, apache'nin gelen SSL bağlantılarını kabul etmesiyle ilgili bir soru değildir.Apache2 httpd, Apache'den giden SSL bağlantıları için ubuntu'nun CA sertifikasını nasıl kullanır?

Giden SSL bağlantıları yapması gereken bir apache modülüm var.

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:

Bu apache benim modül bağlanmaya çalışıyor sunucunun (geçerli) sertifikası bilmediği kullandığı SSL kütüphanesini gösteren geliyor: İster girişimleri için zaman, bu hatayı alır .

Bu çalıştığı yerdeki ubuntu sistemimin CA sertifikası, bu aşağı akım sertifikasını biliyor, openssl s_client her şeyin yolunda olduğunu söylüyor.

Apache2'ye giden bağlantıların çalışması için ubuntu sistem CA sertifikasını nasıl kullanacağımı nasıl anlarım?

güncelleştirmesi - Sertifikaları nereden almaya çalıştığını görmek için bir strace -e open httpd -X yaptım. Apache'nin libssl.so dosyasını açtığını görüyorum, ancak normal ssl.cnf dosyasını veya herhangi bir sertifika dosyasını açmaya bile çalışmıyorum.

snipped useless strace output

Update2: Ben https isteği yaratıyorum nasıl gelince - benim özel apache modülü içerisinden talep ediyorum. Bağlantı kodu temelde görünüyor böylece, Rust yazılmıştır .bu Benim modülü gibi:

mod_mine.so içinde:

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

Özel bir modül mi yoksa varolan bir modülü mi kullanıyorsunuz? Bu modülü adlandırabilir misin? –

+0

@TarunLalwani - bu özel bir modüldür. Bu sadece https çağrıları yapar. Bağımsız çalıştırıldığında, ubuntu'nun libssl'sini kullanarak iyi çalışır. bir nedenle apache'nin içinde çalışmıyor. – marathon

+0

Min çoğaltılabilir örnek ile örnek git repo mu var? –

cevap

1

Ben bunu en uygunudur emin değilim gerçi, çalışan bir çözüm buldu.

openSSL, SSL_CERT_FILE ortam değişkenini alır. Bunu apache modül kaynak kodumda ayarlayabilirim.

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); 
İlgili konular