SSL τερματισμού και του ASP.NET

Αποποίηση ευθυνών για περιεχόμενο της Γνωσιακής βάσης που έχει αποσυρθεί

Αυτό το άρθρο αφορά προϊόντα για τα οποία η Microsoft δεν παρέχει πλέον υποστήριξη. Συνεπώς, το παρόν άρθρο παρέχεται "ως έχει" και δεν θα ενημερώνεται πλέον.

Στήλη φωνητική υποστήριξη ASP.NET

SSL τερματισμού και του ASP.NET

Για να προσαρμόσετε αυτήν τη στήλη με τις ανάγκες σας, θέλετε να προσκαλέσετε να υποβάλετε τις ιδέες σας σχετικά με θέματα που ενδιαφέρουν μπορείτε και θέματα για τα οποία θέλετε να δείτε απευθύνονται στο μέλλον, άρθρα Γνωσιακής βάσης και φωνητική υποστήριξη στήλες. Μπορείτε να υποβάλετε σας ιδέες και τα σχόλιά σας μέσω της φόρμας Σας ρωτήσει για αυτό . Υπάρχει επίσης μια σύνδεση για τη φόρμα στο κάτω μέρος αυτής της στήλης.
Καλώς ορίσατε στη στήλη φωνητική υποστήριξη ASP.NET. Το όνομά μου είναι Jerry Orman. Έχουν με τη Microsoft για περισσότερα από πέντε χρόνια και διέθεσαν οι περισσότερες μου ώρα επικεντρώνεται στις τεχνολογίες που σχετίζονται με το Web, όπως το Microsoft FrontPage και Microsoft προϊόντων και τεχνολογιών SharePoint. Έχω ξοδέψει το τελευταίο έτος εργασία με Microsoft ASP.NET ως ένας μηχανικός υποστήριξης. Αυτό το μήνα, θα κάνουμε για να συνομιλήσετε σχετικά με SSL τερματισμού και του ASP.NET. Ειδικότερα, θέλω να εστιάζεται σε θέματα που προκύπτουν από μια ρύθμιση παραμέτρων του διακομιστή. Θα κάνουμε για να ρίξετε μια ματιά Τερματισμός SSL και κάποια ανεπιθύμητα αποτελέσματα αυτής της ρύθμισης παραμέτρων στην εφαρμογή σας.

Τερματισμό SSL είναι μια ρύθμιση παραμέτρων όπου διακομιστή Web που εκτελεί τον κώδικά σας στέλνει και λαμβάνει κυκλοφορία μέσω HTTP και δεν υπάρχει συσκευή που κρυπτογραφεί και αποκρυπτογραφεί τα δεδομένα μεταξύ του διακομιστή Web και οι υπολογιστές-πελάτες. Σε αυτήν τη ρύθμιση, οι υπολογιστές-πελάτες αποστέλλετε ή λαμβάνετε μήνυμα ΗΤΤΡS. Η ρύθμιση παραμέτρων SSL τερματισμού είναι παρόμοιο με το ακόλουθο:
Πρόγραμμα-πελάτης < — HTTPS — > SSL συσκευή < — HTTP — > διακομιστή Web
Τώρα ας προχωρήσουμε επί δύο ζητήματα που προκύπτουν στο Microsoft ASP.NET 2.0 με αυτήν τη ρύθμιση και ορισμένοι τρόποι για να επιλύσετε τη συμπεριφορά.

Πρόβλημα 1

Όταν καταδείξετε ένα στοιχείο μενού στο στοιχείο ελέγχου ASP.NET 2.0 μενού , λαμβάνετε το ακόλουθο μήνυμα λάθους:
Αυτή η σελίδα περιέχει ασφαλή και μη ασφαλή στοιχεία. Θέλετε να εμφανιστούν τα μη ασφαλή στοιχεία;
Υποτίθεται ότι η εφαρμογή να είναι ασφαλής, χρησιμοποιείτε το πρωτόκολλο SSL, και δεν έχετε προσθέσει όλα τα στοιχεία ελέγχου που απόδοσης μια απόλυτη διαδρομή προς τα πίσω σε μια διεύθυνση HTTP. Τι συνέβη με αυτό το μήνυμα;

Επίσης, το πρόβλημα είναι ότι το
Μενού ελέγχου εκπέμπει κάποιες JavaScript που χρησιμοποιεί ένα αντικείμενο iFrame για να δημιουργήσετε το αναδυόμενο μενού. Πρέπει να δώσετε στο πλαίσιο μια αρχική διεύθυνση URL. Για να αποφύγετε να κάνετε ένα ταξίδι περιττές γύρο στο διακομιστή για σενάρια μη SSL, η δέσμη ενεργειών χρησιμοποιεί
σχετικά με: κενό για τη διεύθυνση URL. Ωστόσο, το πρόγραμμα περιήγησης θεωρεί ότι αυτή η διεύθυνση ασφαλές, ώστε να μπορείτε να λάβετε το παραπάνω σφάλμα. Για περισσότερες πληροφορίες σχετικά με αυτό το ζήτημα σε σχέση με τις υπηρεσίες Microsoft Windows SharePoint Services, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:

837850 εμφανίζεται το μήνυμα "η σελίδα αυτή περιλαμβάνει τόσο ασφαλή όσο και μη ασφαλή στοιχεία" όταν κάνετε κλικ στο κουμπί Προβολή Εξερεύνησης των Windows σε μια βιβλιοθήκη εγγράφων του Windows SharePoint Services ή σε SharePoint Team Services της Microsoft

Μπορώ να αναφέρετε ρητά σενάρια μη SSL επειδή, εάν ο δικαιούχος το μήνυμα ΗΤΤΡS αντί για τη συσκευή SSL του διακομιστή Web, το JavaScript που εκπέμπει το στοιχείο ελέγχου μενού θα προσθέσετε μια γραμμή κώδικα για να ορίσετε την προέλευση του αντικειμένου iFrame σε μια διεύθυνση HTTPS μιας σελίδας στο διακομιστή. Αυτό ξεκινά μια άλλη αίτηση, αλλά δεν επιτρέπει το μήνυμα λάθους. Εάν την ανάπτυξη σε αυτόν τον τύπο περιβάλλοντος, μπορείτε να επιβάλετε την προσθήκη της JavaScript για να αποτρέψετε το μήνυμα λάθους προσθέτοντας αυτόν τον κώδικα στη σελίδα που έχει το στοιχείο ελέγχου μενού .
 <script runat="server">   protected override void Render(HtmlTextWriter writer) 
{
Page.ClientScript.RegisterStartupScript(typeof(Page), "MenuHttpsWorkaround",
Menu1.ClientID + "_Data.iframeUrl='https://myserver/someblankpage.htm';", true);
base.Render(writer);
}
</script>

Ιδανικά, θα πρέπει το μενού σε μια κλάση MasterPage ή UserControl κατηγορίας και θα μπορούσε να προσθέσετε αυτόν τον κώδικα μόνο μία φορά.

Πρόβλημα 2

Ίσως διαπιστώσετε ότι, όταν έχετε το χαρακτηριστικό requireSSL της
στοιχείο < φόρμες > οριστεί στην τιμή true, ο διακομιστής απαντά με επαναλαμβανόμενες ανακατευθύνσεις για το
FormsAuthentication σελίδα σύνδεσης. Αυτό προκαλείται από μια αλλαγή στον τρόπο το
Η μέθοδος FormsAuthenticationModule χειρίζεται το χαρακτηριστικό requireSSL . Εάν ορίσετε την ιδιότητα requireSSL στην τιμή true, η μέθοδος FormsAuthenticationModule δημιουργεί ένα cookie που έχει το χαρακτηριστικό ασφαλείας . (Αυτή η συμπεριφορά είναι ίδια με το .NET Framework 1.1.) Όταν χρησιμοποιείτε το χαρακτηριστικό ασφαλείας , ο υπολογιστής-πελάτης θα είναι δυνατή μόνο το cookie στο διακομιστή εάν ο υπολογιστής-πελάτης χρησιμοποιεί SSL. Αυτό το τμήμα είναι μεγάλη, επειδή ο υπολογιστής-πελάτης πράγματι μέσω SSL. Υποθέτουμε ότι έχετε μια σελίδα SecurePage.aspx που δεν έχουν πρόσβαση στους ανώνυμους χρήστες. Με το χαρακτηριστικό requireSSL και το πρωτόκολλο SSL, τελικά η εξής κυκλοφορία δεδομένων σε μια αρχική αίτηση για την SecurePage.aspx:
— > πρόγραμμα-πελάτης υποβάλει μια αίτηση GET για SecurePage.aspx.

< — διακομιστής απαντά με ένα HTTP 302 (ανακατεύθυνση) στη σελίδα σύνδεσης.

— > πρόγραμμα-πελάτης υποβάλει μια αίτηση GET για Login.aspx.

< — διακομιστής απαντά με ένα 200 OK. Αποδοθεί η σελίδα σύνδεσης υπολογιστή-πελάτη.

— > πρόγραμμα-πελάτης υποβάλει μια αίτηση POST σε Login.aspx.

< — ο διακομιστής αποκρίνεται με μια 302 (ανακατεύθυνση) σε SecurePage.aspx. Ορισμός Cookie κεφαλίδα αποστέλλεται με το χαρακτηριστικό ασφαλείας στον υπολογιστή-πελάτη.

— > πρόγραμμα-πελάτης υποβάλει μια αίτηση GET για να SecurePage.aspx. Επειδή ο υπολογιστής-πελάτης χρησιμοποιεί SSL, μεταβιβάζεται cookie.

< — ο διακομιστής αποκρίνεται με μια 302 (ανακατεύθυνση) στη σελίδα σύνδεσης.

Μπορείτε να λάβετε την ανακατεύθυνση στην τελευταία αίτηση εξαιτίας μιας αλλαγής στην κλάση FormsAuthenticationModule . Έναν επιπλέον έλεγχο προστέθηκε στο ASP.NET 2.0 για να προσδιορίσετε αν ο χρήστης εισάγει ένα ασφαλές cookie μέσω μιας αίτησης μη SSL. Το ASP.NET 2.0 επιστρέφει την κλάση FormsAuthenticationTicket , αν η ιδιότητα FormsAuthentication.RequireSSL έχει οριστεί στην τιμή false ή αν το χαρακτηριστικό Request.IsSecure έχει οριστεί στην τιμή true.
  • Η ιδιότητα FormsAuthentication.RequireSSL έχει οριστεί στην τιμή false , εάν το χαρακτηριστικό requireSSL έχει οριστεί στην τιμή false στο αρχείο παραμέτρων.
  • Το χαρακτηριστικό Request.IsSecure ορίζεται στην τιμή true , εάν ο διακομιστής Web λαμβάνει κυκλοφορία SSL.
Δεδομένου ότι, σε αυτό το σενάριο, ο διακομιστής Web δεν λαμβάνει κυκλοφορία SSL και το χαρακτηριστικό requireSSL έχει οριστεί στην τιμή true, και οι δύο έλεγχοι επιστρέψει την τιμή false. Ως αποτέλεσμα, δεν επιστρέφεται η κλάση FormsAuthenticationTicket και το cookie καταργείται από το αντικείμενο Request.Cookies συλλογής.

Η αίτηση που πραγματοποιεί ο χρήστης είναι ανώνυμος αυτήν τη στιγμή επειδή ο διακομιστής δεν έχει επικυρωθεί ακόμα τις πιστοποιήσεις του χρήστη. Καθώς η αίτηση περνά μέσω της διοχέτευσης ASP.NET, την κλάση UrlAuthorizationModule ελέγχει αν ο χρήστης έχει πρόσβαση στη σελίδα. Δεδομένου ότι ένας ανώνυμος χρήστης δεν έχει πρόσβαση σε μια σελίδα του SecurePage.aspx, το
Κλάση UrlAuthorizationModule επιστρέφει σφάλμα 401 μήνυμα ("πρόσβαση"), με αποτέλεσμα την ανακατεύθυνση στη σελίδα πρόσβασης.

Για να αποφύγετε αυτήν τη συμπεριφορά, πρέπει πρώτα να καταργήσετε το χαρακτηριστικό requireSSL από την ετικέτα < φόρμες > στο αρχείο παραμέτρων. Στη συνέχεια, πρέπει να ορίζετε με προγραμματισμό του ασφαλούς χαρακτηριστικού για το cookie FormsAuthentication . Ο κώδικας που ακολουθεί το κάνει για εσάς, και για τα δύο η
FormsAuthentication cookie και τα cookie της περιόδου λειτουργίας .
void Application_EndRequest(object sender, EventArgs e){
if (Response.Cookies.Count > 0)
{
foreach (string s in Response.Cookies.AllKeys)
{
if (s == FormsAuthentication.FormsCookieName || s.ToLower() == "asp.net_sessionid")
{
Response.Cookies[s].Secure = true;
}
}
}
}

Αναφορές

Για περισσότερες πληροφορίες σχετικά με τον έλεγχο του μενού , επισκεφθείτε την ακόλουθη τοποθεσία του Microsoft Developer Network (MSDN) στο Web:Για περισσότερες πληροφορίες σχετικά με το χαρακτηριστικό requireSSL της ιδιότητας FormsAuthentication.RequireSSL , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:Για περισσότερες πληροφορίες σχετικά με το χαρακτηριστικό IsSecure της ιδιότητας HttpRequest.IsSecureConnection , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:Για περισσότερες πληροφορίες σχετικά με την κλάση FormsAuthenticationModule , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:Για περισσότερες πληροφορίες σχετικά με την κλάση UrlAuthorizationModule , επισκεφθείτε την ακόλουθη τοποθεσία MSDN στο Web:

Ελπίζω να βρείτε αυτές τις πληροφορίες χρήσιμες όταν χρησιμοποιείτε SSL τερματισμού και Microsoft ASP.NET. Θυμηθείτε ότι οι στήλες φωνητική υποστήριξη είναι για εσάς! Όπως πάντα, αίσθηση ελεύθερη να υποβάλουν ιδέες σχετικά με θέματα που θέλετε στο μέλλον απευθύνεται στήλες ή της Γνωσιακής Βάσης της Microsoft χρησιμοποιώντας το
Ερώτηση για την φόρμα.
Ιδιότητες

Αναγνωριστικό άρθρου: 910444 - Τελευταία αναθεώρηση: 17 Ιαν 2017 - Αναθεώρηση: 1

Σχόλια