Cách định cấu hình IIS 7.5 SSL \ TLS để hoạt động với iOS 9 ATS


11

Vấn đề: Ứng dụng di động của chúng tôi không còn có thể thiết lập kết nối an toàn với dịch vụ web của chúng tôi vì iOS 9 hiện sử dụng ATS.

Bối cảnh: iOS 9 giới thiệu App Transport Security

Cài đặt máy chủ: Windows Server 2008 R2 SP1 (VM) IIS 7.5, SSL certs từ digicert. Tường lửa Windows tắt.

Khóa RSA 2048 bit (e 65537)

Nhà phát hành DigiCert SHA2 Máy chủ bảo mật CA

Thuật toán chữ ký SHA512withRSA

Đây là các yêu cầu Bảo mật Vận chuyển Ứng dụng:

Máy chủ phải hỗ trợ ít nhất phiên bản giao thức TLS (Transport Layer Security) phiên bản 1.2. Các mật mã kết nối được giới hạn ở các mật mã cung cấp bảo mật chuyển tiếp (xem danh sách các mật mã bên dưới.) Chứng chỉ phải được ký bằng thuật toán băm chữ ký SHA256 hoặc tốt hơn, với khóa RSA 2048 bit hoặc lớn hơn hoặc đường cong Elliptic 256 bit hoặc lớn hơn (ECC) phím. Chứng chỉ không hợp lệ dẫn đến lỗi cứng và không có kết nối. Đây là những mật mã được chấp nhận:

TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Những gì đã được thử:

  1. Thêm ngoại lệ trong ứng dụng di động để cho phép tên miền của chúng tôi hoạt động, nhưng tôi không muốn sử dụng phương pháp không bảo mật này, tôi muốn sửa SSL của chúng tôi.
  2. Sử dụng IIS Crypto để sử dụng 'thực hành tốt nhất, cố gắng 'pci', và các thiết lập tùy chỉnh. Thậm chí đã thử sửa đổi bộ tiền điện tử thành danh sách trên và sắp xếp lại. Sau mỗi lần thử, máy chủ được khởi động lại và SSL Labs đã được chạy (sau khi xóa bộ nhớ cache). Tôi đã thành công khi chuyển từ xếp hạng F sang A và thậm chí A-, nhưng điều này chỉ dẫn đến iOS 8 và 9 không thể thiết lập kết nối an toàn. (Mã NSURLErrorDomain = -1200 và _kCFStreamErrorCodeKey = -9806) nhập mô tả hình ảnh ở đây
  3. Đã khôi phục VM và thử tập lệnh powershell Thiết lập IIS cho SSL Perfect Forward Secrecy và TLS 1.2 Tôi thậm chí đã thực hiện lần thử thứ hai trong đó tôi đã chỉnh sửa các cyphers từ tập lệnh power thành một danh sách tối thiểu những gì được yêu cầu.

Kết quả: Luôn giống nhau, xếp hạng của A hoặc A-. iOS8 và iOS9 không thể đàm phán kết nối an toàn. Bắt tay Mô phỏng kết quả trong "Giao thức hoặc bộ mật mã không khớp" cho các sản phẩm Safari và iOS. nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

CẬP NHẬT Sau khi làm việc với bộ phận hỗ trợ của Apple, chúng tôi đã thực hiện một số thao tác truy tìm gói:

$ tcpdump -n -r trace.pcap
reading from file trace.pcap, link-type EN10MB (Ethernet)
client > server [S], seq 1750839998, win 65535, length 0
server > client [S.], seq 2461151276, ack 1750839999, win 8192, length 0
client > server [.], ack 1, win 4104, length 0
client > server [P.], seq 1:175, ack 1, win 4104, length 174
server > client [R.], seq 1, ack 175, win 0, length 0

Ba gói đầu tiên là bắt tay ba cách cổ điển SYN - SYN-ACK - ACK để thiết lập kết nối TCP. Gói thứ tư là iOS gửi cho máy chủ của bạn một tin nhắn Xin chào khách hàng TLS, bước đầu tiên trong việc thiết lập kết nối TLS qua kết nối TCP đó. Tôi đã tách tin nhắn này ra và nó có vẻ hợp lý. Trong gói thứ năm, máy chủ chỉ cần ngắt kết nối (bằng cách gửi RST).

Có ai biết tại sao IIS 7.5 sẽ thực hiện RST không?


Tôi đã liên lạc lại với Digicert, chúng tôi đã đổi chứng chỉ RSA của tôi thành chứng chỉ ECC. Bây giờ tôi có iOS 9 hoạt động an toàn, nhưng bây giờ iOS 8 sẽ không kết nối dưới một số lần thử cấu hình.
RobDigital

Câu trả lời:


5

Câu hỏi đã cũ, nhưng nó sẽ được tìm thấy trong quá trình tìm kiếm. Tôi đã dành một chút thời gian để tìm giải pháp cho cùng một vấn đề. Do đó tôi quyết định viết câu trả lời để chia sẻ kết quả của mình với người khác.

Câu trả lời ngắn: bạn không nên sử dụng IIS Crypto để chỉ định thứ tự của Bộ mật mã. Tôi khuyên bạn nên nhấp vào nút "Mặc định" để xóa thứ tự đã đặt trước đó và sau đó sử dụng Chính sách nhóm ("Cấu hình máy tính" \ "Mẫu quản trị" \ "Mạng" \ "Cài đặt cấu hình SSL") để định cấu hình Bộ mã hóa thông qua chính sách cục bộ.

Lý do của lỗi "giao thức hoặc bộ mật mã không khớp" có thể là một từ bên dưới :

  • máy chủ của bạn hỗ trợ một số "bộ mật mã xấu"
  • máy chủ của bạn không hỗ trợ một số bộ mật mã, PHẢI được hỗ trợ tương ứng với đặc điểm kỹ thuật của TLS.
  • máy chủ của bạn hỗ trợ HTTP / 2 và nó có một số giao thức từ danh sách đen phía trên các giao thức khác, không có trong danh sách . Thông thường, đủ để thay đổi thứ tự của bộ mật mã để khắc phục sự cố.

Danh sách đen chính xác có thể khác nhau trên các hệ thống khác nhau. Bạn có thể tìm thấy trong Internet một số danh sách đen. Ví dụ: Phụ lục A của RFC 7540 (Giao thức truyền siêu văn bản Phiên bản 2 (HTTP / 2)) chứa một danh sách. Các bộ mật mã TLS_RSA_WITH_AES_128_CBC_SHAdành cho TLS 1.2 (xem tại đây ) TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256cho TLS 1.3 (xem tại đây ). Điều TLS_ECDHE_ECDSA_*quan trọng duy nhất là bạn sử dụng chứng chỉ với các đường cong elip. Bộ mật mã rất tốt khác TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256chưa được Microsoft triển khai. Ngoài ra, bạn có thể xem xét để thêm ít nhất TLS_ECDHE_RSA_WITH_AES_256_CBC_SHAđể hỗ trợ kết nối từ các hệ thống cũ và TLS_RSA_WITH_AES_128_CBC_SHAhỗ trợ các hệ thống rất cũ (Android 2.3.7, Java 6u45, OpenSSL 0.9.8y) và TLS_RSA_WITH_3DES_EDE_CBC_SHAchỉ khi bạn cần hỗ trợ IE 8 / XP. Vì vậy, bạn có thể sử dụng ngày hôm nay, ví dụ

TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA

với TLS 1.0 bị vô hiệu hóa, TLS 1.1 để bảo mật tốt hơn hoặc chỉ

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

nếu bạn cần phải có bảo mật tốt và hiệu suất tốt nhất.

Ví dụ, bạn có thể đặt bộ mật mã ngắn để giải quyết vấn đề của mình:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

Bên dưới tôi bao gồm một ví dụ về cấu hình trên Windows 10. Tôi đã cấu hình IIS 10 để có xếp hạng A + từ Qualys SSL Labs với khóa RSA 2048 và chứng chỉ SSL miễn phí từ Let Encrypt .

nhập mô tả hình ảnh ở đây

Tôi đã tắt DES 56/56, RC2 128/128, RC2 40/128, RC2 56/128, RC4 128/128, RC4 40/128, RC4 56/128, RC4 64/128, Triple DES 168/168, NULL, MD5, Đa giao thức Hợp nhất Xin chào, PCT 1.0, SSL 2.0, SSL 3.0 và TLS 1.0 / 1.1 theo cách thủ công trong sổ đăng ký (xem KB245030 ). Tôi đã vô hiệu hóa các giao thức TLS 1.0 và TLS 1.1 chỉ vì TLS_FALLBACK_SCSV (tấn công hạ cấp) không thể bị ngăn chặn trong IIS cho đến bây giờ, điều này khiến cho không thể có được xếp hạng A + của www.ssllabs.com . Tôi thấy đó là một bất lợi, nhưng TLS 1.2 hiện được hỗ trợ rất rộng. Bằng cách này, bạn có thể sử dụng DisabledByDefault: 1, nhưng Enabled: 1đối với TLS 1.0 và TLS 1.1. Nó có thể hữu ích nếu bạn chạy SQL Server 2008/2012 trên máy tính. Máy chủ web sẽ không sử dụng TLS 1.0 và TLS 1.1, nhưng SQL Server có sử dụng.

Bước quan trọng nhất, khiến tôi mất nhiều thời gian và đó là vấn đề chính của bạn là cấu hình của Bộ mật mã. Tôi đã làm nó bằng cách sử dụng gpedit.msc. Tôi đã chọn "Cấu hình máy tính" \ "Mẫu quản trị" \ "Mạng" \ "Cài đặt cấu hình SSL" và định cấu hình giá trị "Thứ tự bộ mật mã SSL" theo giá trị sau

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA

Thứ tự trên có thể không tối ưu và tôi không chắc chắn, tất cả các giao thức trên đều được hỗ trợ trên IIS 7.5 (Tôi đã sử dụng IIS 10.0 từ Windows 10). Tuy nhiên, tôi chắc chắn rằng vấn đề của bạn có liên quan đến danh sách Bộ mật mã, bởi vì tôi có cùng một vấn đề giống như bạn đã mô tả trong các thử nghiệm của mình với danh sách Bộ mật mã.

Bằng mọi cách, sau khi định cấu hình các cài đặt ở trên trong Nhóm chính trị và khởi động lại máy tính ( gpupdate /force /target:computerkhông đủ trong các thử nghiệm của tôi), tôi nhận được xếp hạng A + và danh sách kết quả kiểm tra sau đây của phần "Mô phỏng bắt tay":

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Mọi người có thể thấy rằng iOS được hỗ trợ thành công cho các khách hàng sau:

Safari 6 / iOS 6.0.1
Safari 7 / iOS 7.1
Safari 8 / iOS 8.4
Safari 9 / iOS 9

Đối với tôi, các ứng dụng khách không hỗ trợ TLS 1.2 dường như không quá quan trọng và tôi nghĩ rằng cấu hình trên là một sự thỏa hiệp tốt giữa sự hỗ trợ của các máy khách cũ và việc sử dụng các giao thức an toàn.


+1 để xem chính mình với IISCrypto, tôi đã thấy nó cài đặt không chính xác các phím vô hiệu hóa 3DES 112 bit trên windows ... thật đáng sợ khi sử dụng công cụ này.
felickz

0

Nếu hình ảnh IIS Crypto của bạn gần đây giữ nguyên các cài đặt như hiện tại nhưng hãy bật SHA, Diffie-Hellman và PKCS. Điều này sẽ giúp bạn được xếp hạng A nhưng cho phép kết nối iOS 8 trở xuống.


Tôi đã kích hoạt SHA, Diffie-Hellman và PKCS như bạn đề xuất. Khởi động lại máy chủ và làm lại bài kiểm tra ssl labs. Không may mắn. vẫn không thể kết nối với ios 9 và vẫn nhận được "giao thức hoặc bộ mật mã không khớp" trên SSL Labs.
RobDigital

0

Tôi đã vật lộn với điều này trong một vài ngày. Cụ thể, tôi đã kết nối từ một ứng dụng iOS bằng Xamarin Forms PCL để kết nối với dịch vụ nghỉ ngơi ASP.NET Web Api 2 với xác thực OAuth2 Bearer Token.

Điều cuối cùng làm việc cho tôi là sử dụng các thực tiễn tốt nhất của IIS Crypto. Sau đó chỉnh sửa khóa đăng ký mà nó đặt cho thứ tự bộ mật mã:

KEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002\Function

Tôi đã thành công với giá trị sau:

TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P521, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P521, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256, TLS_RSA_WITH_AES_256_GCM_SHA384, TLS_RSA_WITH_AES_128_GCM_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA256, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P521,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P521, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P521, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256, TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, TLS_DHE_DSS_WITH_AES_256_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_RC4_128_MD5, TLS_RSA_WITH_DES_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256

Người cuối cùng được tìm thấy bằng cách sử dụng Charles Proxy, công ty đã đàm phán TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256. Điều dẫn tôi đến điều này là các kết nối đã thành công với Charles Proxy trên (đã cài đặt chứng chỉ giả lập), nhưng không thành công. Thêm bộ phần mềm được sử dụng trong đàm phán đã thực hiện thủ thuật. Dường như proxy đã đàm phán lại với dịch vụ nghỉ ngơi của tôi với thứ được máy chủ của tôi hỗ trợ, nhưng không phải máy khách iOS.

Lưu ý rằng nhiều bộ mật mã được lấy từ thông số kỹ thuật của các bộ ưu tiên của ssllabs cho các thiết bị iOS / OSX khác nhau. Giá trị trên phải bắt tay với mọi thứ trừ IE 6 trên XP theo ssllabs, với xếp hạng A.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.