2017-11-22 25 views
7

Lưu ý đây không phải là câu hỏi về việc apache chấp nhận kết nối SSL trong nước.Làm cách nào để có Apache2 httpd sử dụng chứng chỉ CA của ubuntu cho các kết nối SSL đi từ Apache?

Tôi có mô-đun apache cần thực hiện kết nối SSL gửi đi. Khi nó cố gắng, nó được lỗi này:

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:

này được chỉ ra thư viện SSL apache đang sử dụng không biết về (hợp lệ) Giấy chứng nhận của máy chủ phân hệ của tôi đang cố gắng để kết nối với .

Chứng chỉ CA trên hệ thống ubuntu của tôi nơi điều này đang chạy là tốt, biết về chứng nhận hướng xuống này, openssl s_client cho tôi biết mọi thứ đều ổn.

Làm cách nào để yêu cầu Apache2 sử dụng hệ thống của ubuntu CA cert để làm cho kết nối gửi đi hoạt động?

cập nhật - Tôi đã thực hiện một số strace -e open httpd -X để xem vị trí mà nó đang cố tải chứng chỉ. Tôi thấy apache mở libssl.so, nhưng sau đó tôi không nhìn thấy nó thậm chí cố gắng để mở ssl.cnf thông thường hoặc bất kỳ tập tin chứng chỉ.

snipped useless strace output

Update2: Như thế nào để tôi tạo ra các yêu cầu https - Tôi đang đưa ra yêu cầu từ bên trong mô-đun tùy chỉnh apache của tôi. mô-đun của tôi .so được viết bằng Rust, do đó mã kết nối trông về cơ bản thích:

trong 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

Bạn đang tạo mô-đun tùy chỉnh hoặc sử dụng một số mô-đun hiện có? Bạn có thể đặt tên cho mô-đun đó không? –

+0

@TarunLalwani - nó là một mô-đun tùy chỉnh. Nó chỉ đơn giản là làm cho https gọi ra. Khi chạy độc lập, nó hoạt động tốt, sử dụng libssl của ubuntu. nó không hoạt động bên trong apache vì một lý do nào đó. – marathon

+0

Có thể có mẫu repo git với ví dụ tái sản xuất tối thiểu không? –

Trả lời

1

Tôi tìm thấy một giải pháp mà làm việc, mặc dù tôi không chắc chắn nó là tối ưu.

openSSL lấy biến môi trường SSL_CERT_FILE. Tôi có thể thiết lập điều này trong mã nguồn mô-đun apache của tôi.

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); 
Các vấn đề liên quan