2013-01-07 24 views
8

Tôi đang thử nghiệm một API sử dụng chức năng php curl_exec và chứng chỉ CA nhưng có điều gì đó không ổn và tôi bị mất một chút.Chứng chỉ ngang hàng SSL hoặc khóa từ xa SSH không được OK

Tôi đã định cấu hình SSL trên VirtualHost apache của mình và có vẻ ok (mở https:://[myVHost] ... hoạt động).

Tuy nhiên API gọi curl cho tôi lại tin nhắn này:

  • SSL peer certificate or SSH remote key was not OK

Tôi không phải là rất có kinh nghiệm với SSL vì vậy tôi có vài ý tưởng về nguyên nhân đó.

UPDATE:

Đây là mã Tôi đang sử dụng trong yêu cầu cURL của tôi, tôi đã nhận xét 2 dòng và thay đổi giá trị của họ (nhìn vào dòng 'TODO') và theo cách này nó đang làm việc, tuy nhiên đây chỉ là công việc arround ...

$opts[CURLOPT_URL] = $url; 
    $opts[CURLOPT_RETURNTRANSFER] = true; 
    $opts[CURLOPT_CONNECTTIMEOUT] = 50; 
    $opts[CURLOPT_TIMEOUT] = 100; 
    $headers = array(
     'Accept: application/json', 
     "User-Agent: APIXXX-PHP-Client"); 
    $opts[CURLOPT_HTTPHEADER] = $headers; 
    $opts[CURLOPT_USERPWD] = $env->getApiKey() . ':'; 
    if (certificatePresent()) { 

     // $opts[CURLOPT_SSL_VERIFYPEER] = true; 
     // $opts[CURLOPT_SSL_VERIFYHOST] = 2; 

     // TODO: SET IT BACK 
     $opts[CURLOPT_SSL_VERIFYPEER] = 0; 
     $opts[CURLOPT_SSL_VERIFYHOST] = 0; 

     $opts[CURLOPT_CAINFO] = $path 

     } 

    curl_setopt_array($curl, $opts); 

    $response = curl_exec($curl); 
+0

Chúng tôi cần mã đầy đủ và đầy đủ mà bạn đang sử dụng để thực hiện yêu cầu, bao gồm * tất cả * các tùy chọn curl được đặt. Ngoài ra, đây có phải là chứng chỉ tự ký không? – Charles

+0

Thông tin đã thêm :) về câu hỏi 'chứng chỉ tự ký' Tôi không biết: chứng chỉ được cung cấp với API ... – WonderLand

+5

Bạn đã xác định thành công nguyên nhân gốc:' CURLOPT_SSL_VERIFYHOST' là 2. Khi được đặt thành 2 , curl sẽ xác minh rằng chứng chỉ hợp lệ và chứng chỉ được cấp bởi CA mà nó tin cậy. Nếu chứng chỉ từ xa được tự ký hoặc không được cấp bởi một CA mà nó tin cậy, nó sẽ rên rỉ và đưa ra lỗi giống như lỗi bạn đã đưa ra. Nếu bạn nhận được chứng chỉ từ bên thứ ba, bạn cần phải thuyết phục curl tin tưởng CA đã ký. Bạn nói rằng bạn đã được cấp chứng nhận CA, đúng không? Bạn đã làm gì với nó? – Charles

Trả lời

4

Có thể bạn đang sử dụng SSL certifiacate tự ký, sẽ không chuyển khi tùy chọn CURLOPT_SSL_VERIFYPEER được đặt.

Có hai giải pháp:

  1. Mua chứng chỉ SSL hợp lệ.
  2. Tắt xác minh SSL trong Curl. (add --insecure option)

Nếu bạn tắt xác minh, bạn không thể chắc chắn liệu mình có thực sự liên lạc với máy chủ của mình hay không. Vì vậy, nó phụ thuộc vào mức độ bảo mật bạn cần.

0

Bạn có quyền muốn bật SSL_VERIFYPEER nếu bạn lo lắng về các cuộc tấn công trung gian.

Thiết lập $path của bạn có trỏ đến chứng chỉ (hoặc gói chứng chỉ) do chủ sở hữu API cung cấp không? Chứng chỉ đó có thể đọc được bởi người dùng máy chủ web không? Nếu vậy, bạn đã xác minh rằng (các) chứng chỉ giống như khi bạn truy cập địa chỉ https theo cách thủ công trong trình duyệt và kiểm tra chứng chỉ không?

Nếu bạn không thể làm việc và API bạn đang kết nối có chứng chỉ SSL hoạt động trong trình duyệt bình thường của bạn mà không có cảnh báo, bạn có thể đặt $path cho gói gốc CA trên máy chủ của mình.

0

Bạn có thể tạo chứng chỉ SSL hợp lệ và đảm bảo rằng chứng chỉ đó được lưu trữ trong thư mục đáng tin cậy.

Chứng chỉ SSL hợp lệ có thể được tạo bằng cách bao gồm lệnh sau trong dấu nhắc lệnh của nhà phát triển VS2012. (Điều này có thể đạt được bằng cách nhập nhà phát triển khi bắt đầu)

Lệnh sau tạo chứng chỉ tự ký có thể được sử dụng để kiểm tra ứng dụng web sử dụng Lớp cổng bảo mật (SSL) trên máy chủ web có URL là www.example.com . OID được xác định bởi tùy chọn -eku xác định chứng chỉ đó là SSL server certificate. Chứng chỉ được lưu trữ trong cửa hàng của tôi và có sẵn ở mức máy (thay vì người dùng).Khóa riêng của chứng chỉ có thể xuất và chứng chỉ hợp lệ từ May 10, 2010 through December 22, 2011.

Makecert -r -pe -n CN = "www.example.com" -b 05/10/2010 -e 12/22/2011 -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky trao đổi -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

để biết thêm về cách tạo SSL certificate

Bây giờ chắc chắn rằng chứng chỉ này là đáng tin cậy, điều này có thể được thực hiện bằng cách gõ CERTMGR trong cmd ..

bây giờ cert được tạo nằm trong thư mục PERSONAL .. sao chép và dán nó vào TRUSTED PEOPLE FOLDER.

Điều này sẽ thực hiện thủ thuật. Hãy cho tôi biết nếu điều đó không hoạt động.

2

Mặc dù tôi trả lời một bài cũ, tôi nghĩ rằng nó sẽ giúp mới viewers-

Bạn có thể kiểm tra các vấn đề bằng cách thêm

$opts[CURLOPT_VERBOSE] = 1 

Đối với chứng chỉ tự ký, máy khách của bạn có thể kết nối với máy chủ bằng địa chỉ IP, vì tên máy chủ không có sẵn trong bộ đệm DNS. Trong trường hợp đó, COMMON NAME (CN) của chứng chỉ máy chủ của bạn cần phải khớp với IP máy chủ (đặt địa chỉ IP làm tên chung khi tạo chứng chỉ máy chủ). Khi bạn làm điều đó một cách chính xác, bạn có thể thấy thông báo này:

tên gọi chung: 192.168.0.1 (phù hợp)

Dưới đây là một ví dụ 192.168.0.1.

0

Bên cạnh CURLOPT_SSL_VERIFYPEER có hai thiết lập khác mà có thể được thay đổi để false/0:

CURLOPT_SSL_VERIFYHOST 
CURLOPT_SSL_VERIFYSTATUS 

Ghi chú rằng bạn nên sửa chữa chứng chỉ SSL của bạn & thiết lập thay vì an ninh vô hiệu hóa!

Các vấn đề liên quan