Thiết lập lại kết nối / kết nối SSL với IISExpress


140

Tôi đang sử dụng Visual Studio 2013 mới với IISExpress lần đầu tiên (máy chủ Phát triển ASP.net đã sử dụng trước đây trên VS2010). Tôi đang gặp vấn đề khi cố gắng gỡ lỗi dự án của tôi.

Đây là những gì tôi thấy trong Chrome:

Không thể tạo kết nối an toàn đến máy chủ. Đây có thể là một vấn đề với máy chủ hoặc có thể yêu cầu chứng chỉ xác thực ứng dụng khách mà bạn không có. Mã lỗi: ERR_SSL_PROTOCOL_ERROR

Tôi đã cập nhật tệp phù hợp của mình -> tệp web để Url dự án sử dụng URL https ngay bây giờ. Tuy nhiên, sau khi làm điều đó, bây giờ tôi gặp một lỗi mới khi khởi chạy:

Kết nối đến localhost bị gián đoạn. Mã lỗi: ERR_CONNECTION_RESET

Cảm ơn


Kiểm tra câu trả lời của tôi cho một câu hỏi tương tự stackoverflow.com/questions/28195505/ từ
Bogac

1
Đăng ở đây vì nó có thể dễ dàng bị bỏ qua trong các câu trả lời dưới đây. Nếu câu trả lời được chấp nhận không hiệu quả với bạn, hãy thử điều này thay vào đó: stackoverflow.com/questions/20036984/iêu
IWriteApps

Thay đổi số cổng, làm việc cho tôi.
torun

Câu trả lời:


47

Nếu bạn đang sử dụng URLRewrite để buộc các kết nối SSL trong web.config, có thể bạn đang viết lại địa chỉ localhost của mình để buộc https. Nếu gỡ lỗi với SSL được kích hoạt không quan trọng đối với bạn và bạn đang sử dụng URLRewrite, hãy xem xét thêm <add input="{HTTP_HOST}" pattern="localhost" negate="true" />vào phần viết lại của tệp web.config. Nó sẽ dừng viết lại cho bất kỳ địa chỉ localhost nào nhưng để nó ở đúng vị trí trong môi trường sản xuất. Nếu bạn không sử dụng URLRewrite hoặc cần gỡ lỗi bằng SSL, http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx có thể giúp đỡ. Đó là cho VS2010, nhưng cũng đủ cho VS2013.


7
Tôi đã làm cho nó hoạt động bằng cách thêm dòng đó vào URLrewrite VÀ thay đổi cổng thành trong phạm vi ": 44300-: 44398" (xem câu trả lời dưới đây của uosef)
Rubanov

ĐÚNG! Sau vài giờ gần như mất trí, đây là điều đã giúp tôi!
waka

363

Tôi đã nhận được ERR_CONNECTION_RESET vì số cổng ứng dụng được định cấu hình Visual Studio 2013 / IIS Express của tôi KHÔNG có trong phạm vi : 44300-: 44398 . (Tôi không nhớ phải loại bỏ bất kỳ cảnh báo nào để thoát khỏi phạm vi đó.) Thay đổi số cổng thành thứ gì đó trong phạm vi này là tất cả những gì tôi phải làm để làm cho nó hoạt động.

Tôi nhận thấy điều này sau khi xem xét netsh http show sslcert > sslcert.txtđầu ra và một cái gì đó nhấp chuột với những thứ tôi đọc gần đây về số cổng.


53
Tôi chỉ tiếc rằng tôi có nhưng một upvote để cung cấp cho bài viết này. Làm thế nào tôi sửa loại vô nghĩa này trước SO?
quillbreaker

6
Bạn cũng có thể sử dụng netsh http add sslcert ...để thêm cổng bạn muốn sử dụng. Hữu ích trong một số trường hợp.
brazilianldsjaguar

3
Crikey này đã ăn rất nhiều giờ tôi sẽ không bao giờ quay trở lại ... netshđể giải cứu, đây xứng đáng là một bài đăng trên blog ...
Jim

3
Tôi thấy rằng phạm vi số cổng này được ghi lại trong phần Sử dụng Cổng SSL tùy chỉnh trong Xử lý lỗi liên kết URL trong tài liệu IIS Express .
Schmalls

2
Vẫn hoạt động với Visual Studio 2017 / IIS Express 10
TvdH

87

Đảm bảo xóa mọi chứng chỉ 'localhost' trước đây vì các chứng chỉ có thể xung đột với chứng chỉ được tạo bởi IIS Express. Tôi cũng gặp lỗi tương tự (ERR_SSL_PROTOCOL_ERROR) và tôi đã mất nhiều giờ để tìm ra nó sau khi thử nhiều "giải pháp". Sai lầm của tôi là tôi đã tạo chứng chỉ 'localhost' của riêng mình và có hai trong số đó. Tôi đã phải xóa cả hai và yêu cầu IIS Express tạo lại nó.

Đây là cách bạn có thể kiểm tra và xóa chứng chỉ 'localhost':

  • Khi bắt đầu, nhập -> mmc.exe
  • Tệp -> Thêm / Xóa Snap-in ...
  • Chọn Chứng chỉ -> Thêm> -> Tài khoản máy tính -> Máy tính cục bộ
  • Kiểm tra theo Chứng chỉ> Cá nhân> Chứng chỉ
  • Đảm bảo chứng chỉ localhost tồn tại có tên thân thiện "Chứng chỉ phát triển IIS Express". Nếu không, hãy xóa nó. Hoặc nếu nhiều, xóa tất cả.

Trên Visual Studio, chọn dự án và trong tab thuộc tính, bật SSL = true. Lưu, xây dựng và chạy. IIS Express sẽ tạo chứng chỉ 'localhost' mới.

Lưu ý: Nếu nó không hoạt động, hãy thử những điều sau: đảm bảo tắt IIS Express trên dự án VS và dừng tất cả ứng dụng đang chạy trên ứng dụng đó trước khi xóa chứng chỉ 'localhost'. Ngoài ra, bạn có thể truy cập panel bảng điều khiển> chương trình 'và Sửa chữa IIS Express.


2
Trong trường hợp của tôi, cài đặt chứng chỉ IIS đã bị mất, tuy nhiên chứng chỉ nằm trên đĩa. Thiết lập chứng chỉ SSL và cập nhật ràng buộc HTTPS trên trang web. Điều quan trọng là phải đặt lại ràng buộc https ngay cả khi chứng chỉ ssl đã được chọn trong combobox.
opewix

10
Nó cần để sửa chữa IIS Express. Bây giờ làm việc hoàn hảo. Cảm ơn
Homam

1
Cảm ơn bạn. Trong trường hợp của tôi, tôi đã vô tình xóa chứng chỉ khỏi máy tính của tôi. Tìm thấy nó khi tôi thử thực thi lệnh này và nó đã ném: "Chứng chỉ SSL thêm không thành công, Lỗi: 1312 Một phiên đăng nhập được chỉ định không tồn tại. Nó có thể đã bị chấm dứt." netsh http delete sslcert ipport=0.0.0.0:443 netsh http add sslcert ipport=0.0.0.0:443 appid="{GUID-APP-ID}" certhash="THUMBPRINTOFMYCERTIFICATEINHEXADECIMAL"
UKM

Điều đó là vậy đó! Sao chép certs và phải làm một phần sửa chữa iis express.
madamission

36

Tôi đang tóm tắt các bước giúp tôi giải quyết vấn đề này:

  1. Đảm bảo phạm vi cổng SSL (được sử dụng bởi IIS express) trong khoảng 44300-44398

Trong quá trình cài đặt, IIS Express sử dụng http.sys để dự trữ các cổng 44300 đến 44399 để sử dụng SSL. Điều này cho phép người dùng chuẩn (không có đặc quyền nâng cao) của IISExpress để định cấu hình và sử dụng SSL. Để biết thêm chi tiết về điều này tham khảo ở đây

  1. Chạy lệnh dưới đây là quản trị viên trong Dấu nhắc lệnh. Điều này sẽ xuất ra các ràng buộc Chứng chỉ SSL trong máy tính. Từ danh sách này, tìm ra chứng chỉ được sử dụng bởi IIS express cho cổng tương ứng:

Netsh http hiển thị sslcert> sslcert.txt

  1. Tìm các mục bên dưới trong sslcert.txt (trong trường hợp của tôi, IIS express đang chạy ở cổng 44300)

IP: cổng : 0.0.0.0:44300

Giấy chứng nhận Hash : eb380ba6bd10fb4f597cXXXXXXXXXXX

ID ứng dụng : {214124cd-d05b-4309-XXX-XXXXXXX}

  1. Đồng thời tìm trong bảng điều khiển quản lý IIS Express (RUN (Ctrl + R) -> inetmgr.exe) và tìm xem chứng chỉ tương ứng có tồn tại trong Chứng chỉ máy chủ không

(Nhấp vào ServerRoot -> trong phần IIS () -> Mở Chứng chỉ máy chủ)

  1. Nếu localhost của bạn theo mặc định sử dụng một chứng chỉ khác với chứng chỉ được liệt kê trong Bước 3, hãy tiếp tục với các bước dưới đây

Netsh http xóa sslcert ipport = 0.0.0.0: 44300

Netsh http thêm sslcert ipport = 0.0.0.0: 44300 certhash = New_Cert ve_Hash_without_space appid = {214124cd-d05b-4309-XXX-XXXXXXX}

New_Certert_Hash sẽ là chứng chỉ mặc định của bạn gắn liền với localhost của bạn (Chúng tôi đã tìm thấy ở bước 4) hoặc chứng chỉ mà bạn muốn thêm làm chứng chỉ mới.

PS Cảm ơn bạn đã trả lời uosɐſ (đã giúp tôi giải quyết vấn đề này)


8
Ha, thay đổi cổng từ 53xxx thành 44300 đã giúp tôi.
cdonner

Phải làm điều này sau khi chuyển từ IIS sang IISExpress
K0D4

2
Thay đổi cổng làm việc cho tôi quá. Có ai biết tại sao các cổng phải nằm trong phạm vi này và nơi nó được cấu hình không?
Jim

Thay đổi cổng cho chiến thắng! Và nhận xét của Jim về lý do tại sao các cổng cần phải nằm trong phạm vi 44300-44398?
TChadwick

Trong quá trình cài đặt, IIS Express sử dụng http.sys để dành các cổng 44300 đến 44399 để sử dụng SSL. Điều này cho phép người dùng chuẩn (không có đặc quyền nâng cao) của IISExpress để định cấu hình và sử dụng SSL. Để biết thêm chi tiết về điều này, hãy tham khảo tại đây -> docs.microsoft.com/en-us/iis/extensions/USE-iis-express/ mẹo
Karthik

26

Vấn đề mà tôi gặp phải đã xảy ra với tôi, đôi khi, cho phép HSTS cho localhost và không nhận ra rằng điều này sẽ phá vỡ http: // localhost: someport của tôi trong IIS Express.

HSTS thông báo cho trình duyệt (Chrome trong trường hợp của tôi) LUÔN LUÔN yêu cầu URL bằng HTTPS. Vì vậy, ngay cả khi tôi thậm chí không kích hoạt SSL cho ứng dụng MVC 5 của mình, trình duyệt vẫn sẽ cố gắng truy cập trang web của tôi bằng HTTPS trong URL thay vì HTTP.

Cách khắc phục?

  1. Lướt tới chrome: // net-internals / # hsts
  2. Trong phần xóa, nhập "localhost" và xóa bản ghi khỏi Chrome.

1
Vâng, hsts có thể là một nguyên nhân cho vấn đề này. Điều này đã làm ttrink cho tôi, cảm ơn.
Kosmo

12

Không có lựa chọn nào ở trên làm việc cho tôi. Tôi đã phải làm như sau:

  1. Đã gỡ cài đặt IIS Express 8.0
  2. Đã xóa tất cả các cấu hình trong thư mục Tài liệu của tôi cho IIS Express
  3. Đã cài đặt lại IIS Express 8.0
  4. Đã xóa dự án trên máy cục bộ của tôi và tải xuống phiên bản sạch cho TFS
  5. Chạy dự án - sau đó chạy qua SSL và tôi có thể gỡ lỗi

Tôi đã nhận được các bước từ chủ đề này.

Hi vọng điêu nay co ich.


2
Tôi chỉ hủy cài đặt iis express và cài đặt lại. bây giờ nó hoạt động
Xin

5
Trong trường hợp của tôi, chỉ cần sửa chữa cài đặt IIS (trong Bảng điều khiển) là đủ.
romanoza

Và mọi người trả tiền cho Microsoft cho việc này? Làm thế nào không thể tin được phần mềm phải được thiết kế mà sửa chữa duy nhất là gỡ cài đặt đầy đủ và cài đặt lại?!
Jez

@Jez - Không, nó miễn phí.
Eric Kelly

6

Trong trường hợp của tôi, tôi đã tạo một chứng chỉ tự ký và nó đã hoạt động, ngoại trừ tôi gặp lỗi trong trình duyệt vì chứng chỉ không đáng tin cậy. Vì vậy, tôi đã chuyển chứng chỉ vào thư mục Chứng chỉ gốc đáng tin cậy> Chứng chỉ trong chứng chỉ snapin. Nó hoạt động, và sau đó tôi đóng Visual Studio trong ngày.

Ngày hôm sau, tôi bắt đầu dự án của mình và tôi đã nhận được lỗi được đề cập trong câu hỏi ban đầu. Vấn đề là chứng chỉ mà bạn đã cấu hình IISExpress phải tồn tại trong thư mục Cá nhân> Chứng chỉ hoặc HTTPS sẽ ngừng hoạt động. Khi IIS Express khởi động thành công, bạn có thể kéo chứng chỉ trở lại vị trí tin cậy. Nó sẽ tiếp tục hoạt động cho đến khi bạn khởi động lại IIS Express.

Không muốn làm phiền với việc kéo chứng chỉ qua lại mỗi lần, tôi chỉ cần đặt một bản sao của chứng chỉ ở cả hai nơi và bây giờ mọi thứ đều hoạt động tốt.


2
Bạn có thể Sao chép + Dán chứng chỉ bên trong chứng chỉ đính kèm giống như đó là một tệp thông thường. Mất tôi NĂM để tìm ra điều đó.
Simon_Weaver

6

Tôi gặp vấn đề tương tự trong Visual Studio 2015. Vì tôi sử dụng ràng buộc SSL trong web.config

<rewrite>
   <rules>   
     <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
       <match url="(.*)" />
       <conditions>
          <add input="{HTTPS}" pattern="off" />
       </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
     </rule>
   </rules>
</rewrite>

Và tôi có thể khắc phục vấn đề với câu trả lời của Mr.djroedger. Bằng cách thay thế

<add input="{HTTPS}" pattern="off" />

với

<add input="{HTTP_HOST}" pattern="localhost" negate="true" />

vào web.config, vì vậy mã của tôi là

<rewrite>
  <rules>   
    <rule name="HTTP to HTTPS Redirect" stopProcessing="true">
      <match url="(.*)" />
      <conditions>
         <add input="{HTTP_HOST}" pattern="localhost" negate="true" />
      </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
    </rule>
 </rules>
</rewrite>

4

Tôi gặp vấn đề này, tôi đã cấu hình trang web của mình để yêu cầu toàn cầu https trong FilterConfig.cs.

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new RequireHttpsAttribute());
    }

Tôi đã quên thay đổi url dự án thành https: từ hướng dẫn này http://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-deploy-aspnet-mvc-app-membership-oauth- cơ sở dữ liệu sql / bên dưới ENABLE SSL phần 4. Điều này gây ra các lỗi bạn đang gặp phải.


4

Vấn đề mà tôi gặp phải liên quan đến câu trả lời của @Jason Kleban, nhưng tôi có một vấn đề nhỏ với cài đặt của mình trong Thuộc tính Visual Studio cho IIS Express.

Đảm bảo rằng sau khi bạn thay đổi cổng thành trong phạm vi: 44300 thành 44399, địa chỉ cũng bắt đầu bằng HTTPS

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


3

Một vấn đề khác đã xảy ra với tôi hai lần:
Trong IIS Expressapplicationhost.config thứ tự của các ràng buộc có vấn đề. Một ràng buộc có thể được ưu tiên hơn ràng buộc SSL của bạn, làm cho nó không hoạt động.

Thí dụ:

<site name="MySite007" id="1">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\myuser\projects\mysolutionfolder\MyProject.Service" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation=":8081:localhost" />
        <binding protocol="http" bindingInformation=":8080:" /><!-- evil binding -->
        <binding protocol="https" bindingInformation="*:44327:localhost" />
    </bindings>
</site>

Bạn có thể đã thêm một ràng buộc tương tự như ràng buộc thứ hai để có thể truy cập WebService của bạn từ bên ngoài localhost. Bởi vì ràng buộc này lắng nghe trên bất kỳ địa chỉ nào, nó dường như ghi đè lên ràng buộc SSL mặc dù một cổng khác đã được sử dụng.

Loại bỏ các ràng buộc ác hoặc di chuyển nó xuống.


CÁi này đã sửa nó giúp tôi. Cảm ơn!
richb

3

Xóa IISExpress và vs thư mục và sử dụng phạm vi cổng ssl từ 44300 đến 44399 (đã bao gồm) khỏi bài viết này có hiệu quả với tôi


cảm ơn vì điều này - đã làm việc cho tôi trừ khi tôi không được tin tưởng vào chứng chỉ trong VS - Tôi quá lười biếng để làm bất cứ điều gì về điều đó nên sẽ bỏ qua các cảnh báo và tiến hành!
Dave

2

Đây là giai thoại như tình cờ nghe được từ một đồng nghiệp, nhưng được cho là đây là một vấn đề với chrome buộc https. Tôi thường khởi chạy trong firefox vì vậy tôi chưa thấy vấn đề này trước đây. Sử dụng firefox hoặc tức là làm việc cho đồng nghiệp của tôi.


1

Vấn đề của tôi là do Fiddler gây ra. Khi Fiddler gặp sự cố, đôi khi nó gây rối với cài đặt proxy của bạn. Đơn giản chỉ cần khởi chạy Fiddler dường như để sửa chữa mọi thứ (có lẽ nó tự sửa chữa bằng cách nào đó).


1

Các ' kiểm tra cài đặt chứng chỉ Digicert ' thường hữu ích trong các tình huống như thế này.

Tôi đã có thể xác minh chứng chỉ SSL đang được thử là chứng chỉ tôi mong đợi bằng cách so sánh số sê-ri.

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

Đối với tôi @Jason Kleban câu trả lời là vấn đề thực sự, nhưng đây có thể là một tiện ích rất hữu ích để kiểm tra các xác nhận cơ bản của bạn về chứng chỉ nào đang được tải.


Wow, cảm ơn bạn rất nhiều. Giải pháp duy nhất hiệu quả với tôi.
Fernando Silva

1

Nếu bạn cần sử dụng một cổng ngoài phạm vi 44300-44399, đây là một cách giải quyết:

  • Tạo một trang web mới trong IIS (không phải Express)
  • Liên kết HTTPS với cổng bạn cần
  • Đối với Chứng chỉ SSL, chọn Chứng chỉ phát triển IIS Express
  • Khi trang web được tạo, hãy dừng nó, vì nó không thực sự cần phải chạy

Điều này đăng ký chứng chỉ Phát triển IIS Express với cổng đó và là cách dễ nhất mà tôi tìm thấy để đạt được yêu cầu trong phạm vi 44300-44399.


0

Tôi vừa mới xây dựng lại máy tính của mình. Chuỗi này đã cho tôi manh mối, nơi tôi nhận ra trong cài đặt dự án> Web, dự án được cấu hình để sử dụng HTTP và cổng HTTP. Bằng cách cập nhật nó lên HTTPS và cổng HTTPS chính xác, mọi thứ bắt đầu hoạt động trở lại.


0

Để theo dõi các câu trả lời khác về việc đặt cổng SSL trong khoảng từ 44300 đến 44399, tôi không thể thay đổi thuộc tính Kích hoạt SSL trong Visual Studio, cũng như không đặt URL SSL cụ thể. Các câu trả lời khác, như sửa chữa IIS Express không giúp được gì. Giải pháp là đi vào thư mục .vs song song với tệp sln, mở thư mục con cấu hình và sau đó chỉnh sửa tệp applicationationhost.config. Sau đó, tôi đã thêm dòng https theo cách thủ công và khởi động lại VS.

<binding protocol="http" bindingInformation="*:24941:localhost" />
                <binding protocol="https" bindingInformation="*:44301:localhost" />

0

Trong trường hợp của tôi, tôi chỉ đơn giản là đã quên tôi đã có một ràng buộc được thiết lập cho (trong trường hợp của tôi) https: // localhost: 44300 trong IIS đầy đủ. Bạn không thể có cả hai!


Bạn có thể có cả hai, miễn là cả hai không chạy cùng một lúc.
trnelson

0

Trong trường hợp của tôi, url localhost đã được chuyển hướng đến https: // localhost khi tôi đang gỡ lỗi. Điều này xảy ra từ khoảnh khắc này sang khoảnh khắc khác, mà không thay đổi bất cứ điều gì. Tôi đã giải quyết điều này bằng cách tải lại cứng vào trình duyệt. Đây là đường dẫn

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.