2010-04-11 44 views
12

Có cách nào để kiểm tra JavaScript nếu được cung cấp cho máy chủ lưu trữ chứng chỉ SSL hợp lệ không? (không chặn)Kiểm tra Javascript nếu Giấy chứng nhận SSL hợp lệ

Trong trường hợp của tôi, tôi muốn hiển thị: "bạn cũng có thể sử dụng https: // .." nếu qua JavaScript, tôi có thể yêu cầu https://my_url mà không được yêu cầu chấp nhận chứng chỉ không đáng tin cậy.

Điều này có thể được thực hiện không đồng bộ không?

+1

Câu hỏi là OK, nhưng tôi không thấy câu trả lời hợp lý. Tôi nghĩ rằng những gì đã được mong đợi là một công thức như - thực hiện một yêu cầu AJAX đến máy chủ, có thể bị chặn nếu chứng chỉ không tin cậy (và không chặn cửa sổ trình duyệt). Khi điều đó xảy ra, hãy hiển thị hướng dẫn tải xuống chứng chỉ CA, nếu thiếu. –

+0

Tôi có một trường hợp sử dụng khác cho điều này, nơi tôi chỉ có một vài người dùng đã báo cáo rằng trình duyệt đang thông báo cho họ rằng trang web không an toàn. Nghi ngờ của tôi là nó có gì đó với trình duyệt của họ - giống như một phiên bản cũ của IE. Tôi muốn phát hiện nếu chứng chỉ của tôi không hợp lệ đối với một người nào đó và nếu nó có chẩn đoán được gửi một cách đồng thời trở lại máy chủ của tôi. Có vẻ như không phải là một cách tiêu chuẩn hóa để làm điều này. – Ecropolis

Trả lời

2

Câu hỏi không có ý nghĩa. Bạn không thể nhận được chứng chỉ SSL của máy chủ mà không cần mở kết nối SSL với nó, và một khi bạn đã làm điều đó, nói với người dùng rằng họ có thể làm điều đó cũng hơi vô nghĩa.

+0

Không. Người dùng có thể "chấp nhận chứng chỉ không đáng tin cậy". – Malx

+5

Không có gì? Bạn không thể nhận chứng chỉ SSL của máy chủ mà không cần mở kết nối SSL. Nếu người dùng chấp nhận chứng chỉ, anh ta đã có chane để xem nó. Ý bạn là sao? – EJP

3

Câu trả lời thẳng là không. Javascript không cung cấp bất kỳ phương tiện xác thực chứng chỉ nào. Đây là một công việc còn lại cho trình duyệt.

Cách tiếp cận tốt hơn cho vấn đề này là từ phía máy chủ. Nếu bạn đang kiểm soát trang web, bạn có thể hiển thị biến trên trang có thông tin được thu thập ở phía máy chủ.

Trong Net cái gì đó như

var canSecure = <%= MySiteHasSsl ? "true" : "false" %>; 
if (canSecure) { 
    if (confirm("This site supports SSL encryption. Would you like to switch to a secure connection?")) { 
     location.href = "https://mysite.com"; 
    } 
} 
1

Tôi không hoàn toàn chắc chắn những gì trường hợp sử dụng của bạn. Nếu bạn chỉ đang cố gắng "kiểm tra trước thời hạn" trước khi bạn cung cấp liên kết tới một người nào đó cho một trang web khác thì các câu trả lời khác ở đây sẽ có liên quan nhiều hơn của tôi.

Nếu bạn đang mong đợi mysite.com sử dụng chứng chỉ SSL không được tin cậy mặc định trong trình duyệt nhưng bạn có cách khác để biết nó đáng tin cậy, thì bạn có thể sử dụng triển khai JavaScript TLS để thực hiện chéo yêu cầu miền đến trang web khác đó. Tuy nhiên, điều này yêu cầu trang web của bạn phải được phân phát trên https và đáng tin cậy trong trình duyệt để bắt đầu và trang web khác để cung cấp tệp chính sách tên miền chéo Flash.

Nếu điều này nghe bất cứ điều gì giống như những gì bạn muốn làm, hãy kiểm tra các dự án Forge mã nguồn mở tại github:

http://github.com/digitalbazaar/forge/blob/master/README.md

0

bạn có thể chạy một máy chủ ở nơi khác để xử lý kiểm tra giấy chứng nhận dựa trên bất cứ điều gì bạn muốn, sau đó ứng dụng javascript của bạn sẽ gửi một requ est cho máy chủ đó yêu cầu kiểm tra. Điều này đòi hỏi bạn có ít nhất một máy chủ ở đâu đó trên thế giới mà bạn có thể tin tưởng.

Truy vấn có tính chất này có thể được thực hiện trong nền khá dễ dàng.

7

Hãy xem ở đây: https://support.mozilla.org/pl/questions/923494

<img src="https://the_site/the_image" onerror="redirectToCertPage()"> 

Tuy nhiên, đây có thể là Mozilla cụ thể.

Dù sao, tôi sẽ xem nếu một giải pháp cùng những dòng này sẽ làm việc:

<script> var sslCertTrusted = false; </script> 
<script src="https://example.com/ssltest.js"></script> 
<script> 
    if (!sslCertTrusted) 
    { 
     alert('Sorry, you need to install the certificate first.'); 
     window.location('http://example.com/cert_install_instructions/'); 
    } 
    else 
    { 
     // alert('Redirecting to secure connection') 
     window.location('https://example.com/'); 
    } 
<script> 

Bạn dĩ nhiên cần phải thực hiện trở lại máy chủ web của bạn mã này theo URL https://example.com/ssltest.js:

sslCertTrusted = true; 

tôi 'không chắc chắn chính xác về các chi tiết. Nhưng tôi đã nhìn thấy công nghệ tương tự được sử dụng để phát hiện adblocking vv Bạn có thể cần piggyback trên đối tượng window có thể, nếu biến không thể được sửa đổi bởi một kịch bản khác, nhưng nói chung làm cho bằng chứng trên của khái niệm làm việc là trái như một bài tập cho người đọc.

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