HttpRequest mit HTTPS

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von xored.

    HttpRequest mit HTTPS

    Hey,

    ganz kurze Frage.
    Seit meine Website über HTTPS läuft, funktioniert mein Programm, welches über PHP mit meiner Seite kommuniziert nicht mehr.
    Bekomme immer folgenden Error:

    Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden..


    Dies ist der Originalcode:

    Quellcode

    1. Public Function IsUserPremium(ByVal User As String) As Boolean
    2. Dim client As New Net.WebClient
    3. Dim Post = client.DownloadString("https://www.meinedomain.net/API.php?type=ispremium&parameter=" & User)
    4. If Post = "Expired or not premium" Then
    5. Return False
    6. End If
    7. If Post = "Premium" Then
    8. Return True
    9. End If
    10. End Function


    Dies meine andere Funktion um Requests zu senden:

    Quellcode

    1. Public Function SendRequest(ByVal Type As String, ByVal Parameter As String)
    2. Try
    3. Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(New System.Uri("https://meinedomain.net/API.php?type=" & Type & "&parameter=" & Parameter))
    4. request.Method = System.Net.WebRequestMethods.Http.Get
    5. Dim response As System.Net.HttpWebResponse = request.GetResponse()
    6. response.Close()
    7. Catch
    8. End Try
    9. End Function


    Kriege bei beiden diesen Error. Habe also mit dem Webclient und den Requests Probleme.
    Habe etwas im Internet gesucht und folgende "Lösung gefunden":

    Quellcode

    1. Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As Security.SslPolicyErrors) As Boolean
    2. Return True
    3. End Function
    4. ServicePointManager.ServerCertificateValidationCallback = AddressOf ValidateCertificate
    5. client.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:55.0) Gecko/20100101 Firefox/55.0")


    Ändert leider nichts Am Error.
    Wie fixe ich das?

    Danke :)
    Lg

    *Topic verschoben*


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Das hatte ich vergessen zu erwähnen, denn das habe ich schon probiert..
    Habe jetzt übergangsweise https für die php Datei deaktiviert, die wird eh nur von der Konsole angesprochen, nicht von der Website, aber naja..

    Vollzitat entfernt. ~Thunderbolt


    Meine Website:
    www.renebischof.de

    Meine erste App (Android):
    PartyPalooza

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Thunderbolt“ ()

    Hallo, Leute!
    Möchte gerne wieder das Thema erfrischen, da ich dasselbe Problem habe. Beim Zugrief auf manche Webseiten (nicht allen) um Quellcode zu bekommen , erscheint solcher Fehler wie oben beschrieben:

    Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden.

    Was ich schon versucht habe:
    - letzte VS 2019 instaliert
    - alle Frameworks instaliert und das Projekt drauf umgestellt
    - IE erlaubt TLS 1.1 und 1.2 zu nutzen
    - Funktioniert auf Windows 10 und 7 nicht | in Visual Studio 2010 und 2019 nicht
    - die Zeile "ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12" einzufügen hilft auch nicht
    - Download über "WebClient" geht bei diesen Webseiten auch nicht

    Kann mir jemand da weiter helfen, danke!
    Bist du dir denn sicher das die Gegenstelle/der Server TLS1.2 unterstützt?
    Mit der Zeile ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 setzt du das deine Anwendung NUR TLS1.2 spricht.
    Mit |= kannst du andere Versionen hinzufügen: System.Net.ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

    Vergiss den letzten Teil, VB.Net kann wohl kein Or assignment operator, du könntest es mit System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 probieren.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „slice“ ()

    slice , leider haben die code-Zeilen mir nicht geholfen.

    Jetzt habe ich einwenig den Code verändert , hat aber nicht wirklich geklappt.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Net
    3. Public Class Form1
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. Dim request As System.Net.HttpWebRequest
    6. Dim response As System.Net.HttpWebResponse = Nothing
    7. Dim reader As StreamReader
    8. ' Accept self signed certificates
    9. System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
    10. request = DirectCast(System.Net.WebRequest.Create("https://www.freenet.de/index.html"), System.Net.HttpWebRequest)
    11. request.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:5.0) Gecko/20110619 Firefox/5.0" 'Error 403 remove
    12. request.Headers.Add("ContentType", "application/json")
    13. request.Headers.Add("X-Api-Key", "9E6fUpJ2Av06I0nc4UXJ9TJia0auOI7m3s1pKSUpMa7iX5YufpSIxfPuG5729vU0")
    14. request.Headers.Add("Customer-Identificator", "alabau")
    15. response = DirectCast(request.GetResponse(), System.Net.HttpWebResponse)
    16. reader = New StreamReader(response.GetResponseStream())
    17. Dim rawresp As String
    18. rawresp = reader.ReadToEnd()
    19. RichTextBox1.Text = rawresp
    20. End Sub
    21. End Class

    @petaod In Post #8, im Code steht 'Error 403 remove, kann mich aber auch irren bei der tollen Fehlerbeschreibung (hat aber nicht wirklich geklappt).

    mnemonik schrieb:

    ' Accept self signed certificates
    Der Code nach diesem Kommentar erlaubt die Vebrindung mit HTTPS via TLS 1.2 jedoch nicht mit selbstsignierten Zertifikaten. Ist das hier der Fall? Es wird ein selbstsigniertes SSL/TLS Zertifikat verwendet?

    Falls ja (was ich jedoch nicht empfehlen würde, SSL Zertifikate gibts kostenlos), dann brauchst du das hier:

    C#-Quellcode

    1. ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, sllPolicyErrors) => true;

    VB.NET-Quellcode

    1. ServicePointManager.ServerCertificateValidationCallback = Function(sender, cert, chain, sllPolicyErrors) True
    ich erweiter mal die Antwort von @EaranMaleasi

    bei einem HttpWebRequest kannst du folgendes machen ....

    C#-Quellcode

    1. HttpWebRequest r = (HttpWebRequest) HttpWebRequest.Create(url);
    2. r.ServerCertificateValidationCallback = delegate { return true; };
    slice, stimmt "Fehler 403" ist was komplett anderes, aber dieser Fehler kam ebenfalls raus und ich habe versucht es zu beseitigen. Hat aber nicht wirklich geklappt, manche Webseiten erkennen meine Anfragen als kein Browser und sperren mich.

    petaod, X-Api-Key ist natürlich nicht notwendig und es geht auch ohne, aber in meiner Verzweiflung habe ich ihn einfach von einem Forum übernommen.

    EaranMaleasi, nein, meine Zertifikate ist nicht selbst geschrieben!


    Ich glaube, ich gebe langsam auf und lasse alles wie es ist. Ich weiß nicht wirklich wo das Problem liegt, mache Webseiten mit TLS 1.2 kann man locker ansprechen , die anderen wieder nicht.

    Danke Leute! ;)
    Moin Moin zusammen,

    ich möchte mich dem Thema ebenfalls anschließen.
    Zuerst einmal danke für die bereits möglichen Lösungsvorschläge. Leider geht es bei mir nicht.
    Anbei ein Screenshot mit der Meldung und dem Codebereich.



    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub bt_send_Click(sender As Object, e As EventArgs) Handles bt_sms_send.Click
    2. Dim url As String = My.Settings.sms_push_url & My.Settings.sms_token & "&to=" & lb_rufnummern.SelectedItem.ToString & "&text=" & tb_sms_message.Text & "&debug=" & My.Settings.sms_debug
    3. Dim request As WebRequest = WebRequest.Create(url)
    4. System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
    5. request.Credentials = CredentialCache.DefaultNetworkCredentials
    6. Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
    7. Console.WriteLine(response.StatusDescription)
    8. Dim dataStream As Stream = response.GetResponseStream()
    9. Dim reader As StreamReader = New StreamReader(dataStream)
    10. Dim responseFromServer As String = reader.ReadToEnd()
    11. If responseFromServer = "100" Then
    12. timer_close_after_sms.Enabled = True
    13. tb_nachname.Enabled = False
    14. tb_vorname.Enabled = False
    15. bt_sms_send.Enabled = False
    16. tb_sms_message.Enabled = False
    17. lb_rufnummern.Enabled = False
    18. ElseIf responseFromServer = "101" Then
    19. MessageBox.Show("Versand fehlgeschlagen", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    20. ElseIf responseFromServer = "201" Then
    21. MessageBox.Show("Absender ungültig. Erlaubt sind max 11 alphanumerische oder 16 numerische Zeichen.", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    22. ElseIf responseFromServer = "202" Then
    23. MessageBox.Show("Empfängernummer ungültig", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    24. ElseIf responseFromServer = "301" Then
    25. MessageBox.Show("Empfängernummer unbekannt", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    26. ElseIf responseFromServer = "305" Then
    27. MessageBox.Show("Keine Nachricht zum versenden gefunden", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    28. ElseIf responseFromServer = "401" Then
    29. MessageBox.Show("Nachricht zu lang", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    30. ElseIf responseFromServer = "402" Then
    31. MessageBox.Show("Reloadsperre, die SMS wurde bereits innerhalb von 180 Sekunden verschickt", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    32. ElseIf responseFromServer = "403" Then
    33. MessageBox.Show("Maximales Limit pro Tag für diese Nummer erreicht.", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    34. ElseIf responseFromServer = "500" Then
    35. MessageBox.Show("Zu wenig Guthaben vorhanden.", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    36. ElseIf responseFromServer = "600" Then
    37. MessageBox.Show("Carrier Zustellung misslungen", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    38. ElseIf responseFromServer = "700" Then
    39. MessageBox.Show("Unbekannter Fehler", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    40. ElseIf responseFromServer = "900" Then
    41. MessageBox.Show("Authentifizierung ist fehlgeschlagen. Bitte Api Key prüfen", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    42. ElseIf responseFromServer = "902" Then
    43. MessageBox.Show("HTTP-API für diesen Account nicht aktiviert", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    44. ElseIf responseFromServer = "903" Then
    45. MessageBox.Show("Falsche Server-IP", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    46. ElseIf responseFromServer = "11" Then
    47. MessageBox.Show("SMS Carrier temporär nicht verfügbar", "eWaZi - eSMS", MessageBoxButtons.OK, MessageBoxIcon.Information)
    48. End If
    49. reader.Close()
    50. dataStream.Close()
    51. response.Close()
    52. End Sub


    Es hat seit 9 Monaten keine Änderung am Code stattgefunden und es ging problemlos bis ~ vor 2 Wochen.
    Angesprochen wird das SMS77.io Gateway.
    gateway.sms77.io/api/balance?p=(HIERKOMMTDERAPIKEY)
    Ruf ich den Link so auf im Browser, geht es problemlos.
    Noch jemand eine Idee?
    Danke und Grüße,
    samson

    NACHTRAG: Ich denke ich habe das Problem gefunden.

    Im Screenshot ist zusehen, das es eine TSL1.3 Version ist.
    Leider noch keine Lösung dafür.
    Nein! Doch! OHH!
    Setz mal System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 ganz am Anfang, beim Start deiner Anwendung bevor du irgendetwas anderes machst.
    Mit so wenig Infos kann dir keiner Helfen.
    Erstmal solltest du uns verraten welche Fehlermeldung du bekommst, dann mit welcher Version von .Net du arbeitest und welche TLS Versionen dein Ziel unterstützt (zb: ssllabs.com/ssltest/).
    SSl/TSL Verbindung ist kein Sicherer Kanal , bei andere seiten geht es Problemlos.
    mir reicht wenn du mir sagen könntest wie ich bei diesen Fehler weite vorgehen könnte...

    Bei ein anderen User Funktioniert es problemlos er benutz das selbe Netframework wie ich 4.7.2 und sogar auch VB 2019
    der einzigste unterschied ist ich habe Windows 8.1 Pro und er 10.
    allerdings kommt dieser Fehler Trotzdem bei mir, nagut ich Poste mal die Seite man braucht es ja eh für später mal die Lösung..

    Die Test Seite ist diese:
    Link zu einer fragwürdigen Seite an dieser Stelle entfernt ~VaporiZed



    VB.NET-Quellcode

    1. Private Function DownloadSite(url As String) As String
    2. Dim request As HttpWebRequest = HttpWebRequest.CreateHttp(url)
    3. request.CookieContainer = C
    4. request.AutomaticDecompression = DecompressionMethods.GZip And DecompressionMethods.Deflate
    5. Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
    6. Dim reader As New StreamReader(response.GetResponseStream())
    7. Dim result As String = reader.ReadToEnd()
    8. Return result
    9. End Function


    Cookiecontainer ist auch als Private Inztanz Global Deklariert.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()