2010-03-25 29 views
15

Tôi đang cố định cấu hình trang web IIS để yêu cầu chứng chỉ ứng dụng khách SSL. Trang web được thiết lập trong cả IIS 6 và 7, mặc dù tôi quan tâm hơn đến việc nó làm việc cho 7. Tôi đặt thuộc tính require client certificate trong IIS và nó hoạt động tốt khi truy cập trang web thông qua một trình duyệt web, nhưng một Java- khách hàng dựa trên đang gặp sự cố khi truy cập nó.Làm cho IIS yêu cầu chứng chỉ máy khách SSL trong quá trình bắt tay ban đầu

Tôi tin rằng vấn đề là IIS không yêu cầu chứng chỉ ứng dụng khách trong quá trình bắt tay SSL ban đầu. Thay vào đó nó thương lượng một kết nối SSL bình thường, kiểm tra xem liệu tài nguyên có yêu cầu chứng chỉ ứng dụng khách hay không và sau đó nó có bắt đầu một bắt tay SSL mới yêu cầu chứng chỉ ứng dụng khách hay không. IIS thực hiện điều này để hỗ trợ các trang web chỉ yêu cầu chứng chỉ ứng dụng khách cho một số tài nguyên nhất định. Ngay cả khi yêu cầu được chỉ định cho toàn bộ trang web, IIS vẫn khởi tạo hai bắt tay SSL. Tôi muốn buộc IIS yêu cầu chứng chỉ ứng dụng khách trong lần bắt tay SSL đầu tiên, hy vọng sẽ có được những thứ làm việc cho khách hàng. (Khách hàng được phát triển bởi một đối tác bên ngoài và tôi hầu như không có kiến ​​thức về cách nó được thiết lập và không có quyền truy cập vào mã nguồn của nó)

Có ai xử lý vấn đề này trong IIS trước đó không?

+0

Bạn có thể muốn thử câu hỏi này về serverfault.com – Jeff

Trả lời

6

Tôi mất một lúc để tìm cài đặt metabase này. Chúng tôi đã gặp vấn đề tương tự với khách hàng của chúng tôi bằng cách sử dụng thư viện certicom mới. Kể từ khi phát hiện ra cuộc tấn công MITM arround SSL Renegotiation, câu trả lời trong rất nhiều vòng tròn đã được treo lên trên các yêu cầu thương lượng lại.

chạy cmd sau từ \ inetpub \ adminscripts sẽ buộc IIS luôn yêu cầu chứng chỉ ứng dụng khách.

Đối với IIS 6: cscript adsutil.vbs thiết \ W3SVC \ SiteID \ SSLAlwaysNegoClientCert Đúng

(Vì vậy, đối với các trang web mặc định, adsutil.vbs cscript thiết \ W3SVC \ 1 \ SSLAlwaysNegoClientCert True)

Giữ lưu ý rằng một số khách hàng Lời nhắc Internet Explorer cho chứng chỉ ứng dụng khách khi nó nhận được gói đó với chứng chỉ ứng dụng khách là cần thiết hay không.

Đối với IIS 7:

Lưu văn bản sau vào một tập tin gọi là "Enable_SSL_Renegotiate_Workaround.js"

var vdirObj=GetObject("IIS://localhost/W3svc/1"); 
// replace 1 on this line with the number of the web site you wish to configure 

WScript.Echo("Value of SSLAlwaysNegoClientCert Before: " + vdirObj.SSLAlwaysNegoClientCert); 
vdirObj.Put("SSLAlwaysNegoClientCert", true); 
vdirObj.SetInfo(); 
WScript.Echo("Value of SSLAlwaysNegoClientCert After: " + vdirObj.SSLAlwaysNegoClientCert); 

Chạy lệnh sau đây từ một dấu nhắc lệnh nâng lên/quản trị:

cscript. exe enable_ssl_renegotiate_workaround.js

(Được lấy từ bài viết KB cho 977377)

+1

tốt, nó didnt như cách tôi đã gõ nó ... generic cscript adsutil.vbs \ W3SVC \ SiteID \ SSLAlwaysNegoClientCert Đúng cho trang web mặc định (Ví dụ) cscript adsutil.vbs \ w3svc \ 1 \ SSLAlwaysNegoClientCert Đúng –

+0

Tính năng này có hoạt động trong IIS 7 không? Tôi nhớ tìm SSLAlwaysNegoClientCert nhưng tôi đã không thể tìm ra cách để thiết lập nó trong IIS 7. Tôi tìm thấy lời giải thích này gần đây: http://forums.iis.net/t/1158990.aspx. Cuối cùng, chúng tôi quyết định đi một con đường khác để xác thực khách hàng của chúng tôi, vì vậy sự quan tâm của tôi chỉ là từ sự tò mò. Cảm ơn câu trả lời của bạn. – nslowes

+0

Có, tài liệu thiết lập của chúng tôi đã đề xuất các thành phần tương thích IIS 6. Vì vậy, tôi đã nhận ra dễ dàng. Câu hỏi của bạn có thể đã tiết kiệm cho tôi một sự nhai nhai vào thứ hai. Tôi đã không kiểm tra xem adsutil có phải là một phần của các thành phần tương thích IIS 6 hay không. Tôi đã có quá nhiều quá nhiều để lo lắng về điều đó ngay bây giờ. –

8

Đây là cách tôi đã làm điều này, trên IIS 7.5:

  1. Chạy sau trong nhắc lệnh admin: netsh http show sslcert
  2. Lưu sản lượng trong một tập tin văn bản.Sẽ giống như thế này:

    IP:port     : 0.0.0.0:443 
    Certificate Hash  : [a hash value] 
    Application ID   : {[a GUID]} 
    Certificate Store Name : MY 
    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 
    
  3. Tạo một tập tin batch sử dụng những thông tin:

    netsh http show sslcert 
    netsh http delete sslcert ipport=0.0.0.0:443 
    netsh http add sslcert ipport=0.0.0.0:443 certhash=[your cert hash from above] appid={[your GUID from above]} certstorename=MY verifyclientcertrevocation=enable VerifyRevocationWithCachedClientCertOnly=disable UsageCheck=Enable clientcertnegotiation=enable 
    netsh http show sslcert 
    

    (Vâng, bạn phải xóa đi rồi thêm, bạn có thể không chỉ làm thay đổi clientcertnegotiation trong- Đó là lý do tại sao điều quan trọng là phải lưu băm và GUID, do đó, nó biết những gì để thêm lại.)

  4. Chạy tập tin thực thi đó, kiểm tra xem có lỗi nào không.

Hãy nhớ rằng cài đặt này được áp dụng mỗi chứng chỉ, không phải trên mỗi máy chủ. Vì vậy, nếu bạn sử dụng nhiều certs, hoặc thay đổi/cập nhật cert của bạn, bạn sẽ phải làm điều này một lần nữa.

+0

Nên có dòng mới giữa mỗi lệnh netsh đó. Tôi không thể nhớ mình đã lấy từ đâu - KB? MSDN? – CrazyPyro

+0

Thứ hai, điều này làm việc trong IIS 7.5 trên Windows 2008 R2. –

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