2014-12-22 31 views
7

Tôi có ứng dụng C# tự cung cấp Owin cung cấp dịch vụ Web API trên 127.0.0.1:5555 (chỉ nghe trên máy cục bộ, không có kết nối bên ngoài).Chứng chỉ SSL tự ký cho localhost, cách tin cậy

Các dịch vụ Web API này được gọi bằng cách sử dụng Ajax từ ứng dụng AngularJS. Ngoài ra: lý do cho ứng dụng Owin là sự tương tác nhất định với phần cứng là cần thiết, điều không thể thực hiện được từ bên trong trình duyệt. Ngoài ra, ứng dụng AngularJS là để sử dụng nội bộ, vì vậy tôi có quyền kiểm soát đối với các trình duyệt được sử dụng.

Ở trên hoạt động rất tốt trên HTTP, nhưng ứng dụng Angular JS cần sử dụng SSL, ứng dụng này không hoạt động trừ khi ứng dụng Owin cũng sử dụng SSL (nếu không bạn gặp lỗi "Nội dung hỗn hợp").

Tôi đã mua chứng chỉ chính thức cho ứng dụng AngularJS và tôi đang sử dụng các chứng chỉ tự ký cho các công cụ địa phương của Owin.

Vấn đề là tôi nhận được "NET :: ERR_CERT_AUTHORITY_INVALID" (khi testin từ Chrome) và "net :: ERR_INSECURE_RESPONSE" từ ứng dụng AngularJS khi nói chuyện với API Web Owin.

Dưới đây là những gì tôi đã làm, trong đột quỵ rộng:

tôi đã sử dụng một hộp CentOS để tạo ra các CERT cho localhost và xuất khẩu nó để pkcs12/định dạng PFX. Tôi cũng tạo ra một CA cert và xuất khẩu nó theo cùng một cách.

Sử dụng MMC Tôi đã nhập chứng chỉ localhost trên máy tính Windows 7 chạy ứng dụng Owular Angular & vào Chứng chỉ (Máy tính cục bộ)> Cá nhân> Chứng chỉ.

tôi cũng nhập khẩu các cert CA trên máy tính Windows 7 vào Certificates (Local Computer)> Trusted Root Certification Auhorities> Chứng chỉ

Nhìn vào cert localhost, nó nói "Cấp cho: localhost", Cơ quan cấp: "ca.acme.com", "Bạn có khóa riêng để chứng thực chứng chỉ này", (theo Đường dẫn chứng nhận) "Chứng chỉ này là Ok"

CA CA nói "Đã phát hành tới: ca.acme.com" , Được phát hành bởi: "ca.acme.com", "Bạn có khóa riêng có chứng nhận này", (theo Đường dẫn chứng nhận) "Chứng chỉ này là Ok"

netsh http show sslcert 

IP:port     : 127.0.0.1:5555 
Certificate Hash  : 1234555555555555555555511155555555555555 
Application ID   : {1234a123-1234-1234-1234-123412341234} 
Certificate Store Name : (null) 
Verify Client Certificate Revocation : Enabled 
Verify Revocation Using Cached Client Certificate Only : Disabled 
Usage Check : Enabled 
Revocation Freshness Time : 0 
URL Retrieval Timeout : 0 
Ctl Identifier   : (null) 
Ctl Store Name   : (null) 
DS Mapper Usage : Disabled 
Negotiate Client Certificate : Disabled 

Tôi đang thiếu gì? Làm thế nào tôi có thể làm cho Chrome, vv tin tưởng SSL cert cho localhost?

+0

Nếu điều này chỉ dành cho thử nghiệm của riêng bạn: Gọi URL HTTPS trực tiếp sử dụng chứng chỉ đó và thêm ngoại lệ trong trình duyệt của bạn. Nếu bạn muốn nó hoạt động ở mọi nơi trong trình duyệt của người dùng trên web - thì bạn cần nhận chứng chỉ được CA tin cậy ký. – CBroe

+0

http://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate – epascarello

+0

@CBroe Nó không phải để thử nghiệm. Ngoài ra, điều này sẽ được sử dụng trên một số lượng lớn các máy tính nội bộ; Tôi có thể nhận được một cert chính thức cho localhost và sử dụng nó trên tất cả chúng bằng cách nào đó? Vì đây là tất cả lưu lượng truy cập localhost (không có dữ liệu nhạy cảm), tôi thực sự không có vấn đề về bảo mật. – Lars335

Trả lời

5

Tôi đã làm việc này (đủ cho nhu cầu hiện tại của tôi, ít nhất).

tôi sao chép các CERT localhost từ "Giấy chứng nhận (Local Computer)> Cá nhân> Chứng chỉ" thành "Giấy chứng nhận (Current User)> Cá nhân> Giấy chứng nhận". Điều này đã loại bỏ dấu chéo màu đỏ của https trong Chrome (và thông báo "NET :: ERR_CERT_AUTHORITY_INVALID") cũng như lỗi "net :: ERR_INSECURE_RESPONSE" trong AngularJS. Lưu ý rằng trong trường hợp của tôi, cert localhost phải nằm trong cả cửa hàng Máy tính cục bộ và trong Cửa hàng người dùng hiện tại, nếu không lệnh netsh để gắn nó vào cổng 5555 (đối với ứng dụng Owin) sẽ không thành công:

&answer=
netsh http add sslcert ipport=127.0.0.1:5555 certhash=1234555555555555555555511155555555555555 appid={1234a123-1234-1234-1234-123412341234} 

SSL Certificate add failed, Error: 1312, A specified logon session does not exist. It may already have been terminated. 

Vẫn không có móc khóa màu xanh lá cây đẹp trong Chrome (bây giờ nó có hình tam giác nhỏ màu vàng trên khóa bàn phím, "Danh tính của trang web này đã được xác minh bởi ca.acme.com nhưng không có hồ sơ kiểm toán công khai "), nhưng điều này dường như không ảnh hưởng đến giao tiếp Web API, vì vậy nó sẽ ổn thôi.

Nếu ai biết cách dễ dàng để làm cho nó trở nên xanh và đẹp Cảnh báo, tôi vẫn quan tâm, nhưng nó không quan trọng, nhưng không quan trọng,

+0

Làm cách nào để sao chép? Tôi không chắc chắn làm thế nào để làm điều đó trong các snap-in MMC. Nó là một xuất khẩu/nhập khẩu? –

-2

Không, bạn sẽ không thể nhận được chứng chỉ cho "localhost" được ký bởi bất kỳ nhà cung cấp SSL có uy tín nào, bởi vì "localhost" không nằm trong tên miền thuộc về bạn (Thật vậy, nó không phải là chính xác dưới một tên miền ở tất cả; nó là một tên máy chủ trần.)

Bạn có thể tạo một tên miền thực (ví dụ, loca lhost.example.com) giải quyết thành 127.0.0.1 và nhận chứng chỉ cho chữ ký đó, nhưng điều đó khá đáng ngờ. Một số nhà cung cấp SSL có thể chưa ký tên. Đó là giá trị một thử, mặc dù!

+7

Câu hỏi thực sự cho hầu hết ai sẽ đọc chủ đề này là, làm thế nào để chúng tôi làm cho Chrome STFU về chứng chỉ tự ký của chúng tôi khi thử nghiệm trên máy chủ cục bộ? Tôi đã phải chuyển sang firefox từ một tháng trước vì trải nghiệm chrome là khổ sở – Amalgovinus

+3

Bạn có thể bắt đầu chrome ở chế độ để bỏ qua tất cả các lỗi SSL cert ... Nó yêu cầu bạn sử dụng tùy chọn dòng lệnh nhưng hoạt động tốt. Hãy thử điều này: '--ignore-certificate-errors' tại dòng lệnh. Thêm [chi tiết tại đây] (http://superuser.com/a/1036062/38941) –

0

Trên Linux tôi phải apt-gt install libnss3-tools

Với libnss3-công cụ mà bạn có được certutil

Bây giờ chìa khóa-lệnh:

certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n <your alias> -i <your crt-file to import> 

này giải quyết tất cả các vấn đề của tôi với Chrome trên Raspberry/Linux

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