[Gelöst] Asterisk: PJSIP syntax error exception

Elux011

Neuer User
Mitglied seit
8 Sep 2009
Beiträge
14
Punkte für Reaktionen
1
Punkte
3
Hallo,
ich bekomme bei der Anmeldung des Asterisk bei der Telekom folgende Fehlermeldung:

WARNING[11896]: pjproject: <?>: sip_transport. Dropping 763 bytes packet from UDP 217.0.148.133:5060 : PJSIP syntax error exception when parsing 'Via' header on line 2 col 35

die Pakete sehen IMHO aber ok aus:

<--- Transmitting SIP request (579 bytes) to UDP:217.0.148.133:5060 --->
REGISTER sip:tel.t-online.de SIP/2.0
Via: SIP/2.0/UDP 84.188.20.24:5060;rport;branch=z9hG4bKPj70ac0439-257f-4f2f-b66b-6dbc4086d09c
From: <sip:[email protected]>;tag=be0e6486-09d5-46e3-bb74-43aed2fa3594
To: <sip:[email protected]>
Call-ID: f76e88f4-a0b9-46f9-b5b1-240a447d4231
CSeq: 58877 REGISTER
Contact: <sip:[email protected]:5060>
Expires: 480
Allow: OPTIONS, REGISTER, SUBSCRIBE, NOTIFY, PUBLISH, INVITE, ACK, BYE, CANCEL, UPDATE, PRACK, INFO, MESSAGE, REFER
Max-Forwards: 70
User-Agent: Asterisk PBX 22.6.0
Content-Length: 0

Das Internet ist in dieser Frage nicht sonderlich hilfreich; kann Jemand das Problem sehen? Ich sehe einfach Nichts, was stören würde...

Wird sonst noch etwas gebraucht? pjsip.conf oder so?
 
Hallo @Elux911,
Die Warnung von Asterisk heißt "Dropping 763 bytes packet from UDP 217.0.148.133:5060" -> Das ist ein Paket von der Telekom zu Asterisk.

Du suchst aber nach dem Fehler in einem Paket, welches von Asterisk zur Telekom geschickt wird: "Transmitting SIP request (579 bytes) to UDP:217.0.148.133:5060"
Da wirst Du den angeblichen Fehler nicht finden. Du musst also schon das eingehende Paket untersuchen. Da Du UDP verwendest, kannst Du ja den Datenstrom mit sngrep oder natürlich auch mit wireshark analysieren, falls asterisk dieses Paket erst gar nicht loggen sollte.

Kann wohl eher kein Problem der Telekom sein, da ich mit meinem Asterisk pjsip-Server das Problem nicht habe (allerdings kein UDP sondern TLS). Wobei, die haben ja eine Vielfalt von Maschinen - ganz ausgeschlossen wäre es grundsätzlich auch nicht. Also erstmal das korrekte Paket finden :).
 
Du hast recht, das habe ich irgendwie übersehen. Naja, nach Stunden der Fehlersuche sieht man manchmal den Wald vor lauter Bäumen nicht...
Du benutzt TLS? Sag mal, wie hast Du das mit den Zertifikat geregelt? Ich bin nach Asterisk-Doku vorgegangen und bekomme von der Telekom (logischerweise) zurück: Dem Zertifikat wird nicht vertraut...
 
Du brauchst kein Zertifikat - Asterisk ist an der Stelle (aus TLS-Sicht!) ausschließlich Client. Die Verbindung wird im Rahmen des Registers durch Asterisk aufgemacht und bleibt dann solange offen, wie asterisk läuft oder bis die Telekom die Verbindung (aus welchen Gründen auch immer) beendet. Dann macht Asterisk einen reconnect. Kommt aber extrem selten vor - eigentlich so gut wie gar nicht. Die Telekomserver bauen keinerlei Verbindung zu asterisk auf.

Zur TLS-Konfig von Asterisk zur Telekom habe ich in der Vergangenheit hier diverse Dinge geschrieben. Die gelten im großen und ganzen nach wie vor. Allerdings sind keine Patche mehr nötig (auch kein mediasec mehr).
 
Ich habe mal das Forum durchsucht und auch Diverses gefunden. Es ist verwirrend.
Du hattest in einem Thread ( Telekom All IP Privat endlich...) geschrieben:
ca_list_file=/etc/pki/tls/certs/ca-bundle.crt
Ich nehme an, das das die Zertifikate der Telekom sind? Die braucht der Asterisk ja um zu überprüfen (verify_server=yes). Wenn ja, woher sind die?

Ich bekomme jetzt vom Asterisk die folgende Meldung:

[Dec 8 23:55:07] ERROR[23345]: res_pjsip/pjsip_transport_events.c:190 verify_log_result: Transport 'system-internet-tls' to remote 'tel.t-online.de' - 217.0.148.133:5061 - The certificate is untrusted

Also nehme ich an, das ich diese Zertifikate brauche?

Habe ich das bisher erst einmal richtig verstanden?
 
ca_list_file verweist auf die installierten root CAs Deiner Distri. Das ist hier ein Symlink auf eine große pem-Datei, die sämtliche CAs enthält (kann aber von Distri zu Distri abweichen). Bei CentOS war es damals der oben genannte Pfad. Bei openSuse Leap 15.6 kann der gleiche Pfad verwendet werden. Bei Leap muss dazu z.B. noch das Paket ca-certificates und p11-kit installiert sein.

Kannst Du so testen:
Code:
dig +noall +answer _sips._tcp.tel.t-online.de SRV
Damit bekommst Du den Hostnamen des SIPS-Servers, der für Dich relevant ist.
Mit openssl kannst Du nun prüfen, ob der Server verifiziert werden kann:
Code:
openssl s_client -showcerts -connect server_von_oben:5061

Ergibt dann sowas in der Art (gekürzt):
Code:
depth=2 C = DE, O = T-Systems Enterprise Services GmbH, OU = T-Systems Trust Center, CN = T-TeleSec GlobalRoot Class 2
verify return:1
depth=1 C = DE, O = Deutsche Telekom Security GmbH, CN = Telekom Security ServerID OV Class 2 CA
verify return:1
depth=0 C = DE, ST = Nordrhein-Westfalen, L = Bonn, O = Deutsche Telekom AG, CN = tel.t-online.de
verify return:1

Wichtig ist eben, dass Du bei ca_list_file auf das Zertifikatsbundle Deiner Distri verweist und dort alle Zertifikate drin sind - auch die der Telekom. Die sind üblicherweise dabei. Falls nicht, kannst Du sie Dir bei der Telekom selbst besorgen - musst Du aber selber danach suchen - der Namen der relevanten Zertifikate ist ja oben bereits im Ergebnis von openssl enthalten (die ersten 2).
 
Boha, jetzt geht es offenbar!!!!
Es war eine Zangengeburt:
zunächst habe ich Deine o.g. Anweisungen durchgeführt und bekam auch exakt die Ausgabe, die Du erwähnt hast. Also kann OpenSSL das/die Telekom-Zertifikate
verifizieren.
Der Asterisk meldete jedoch:
res_pjsip/pjsip_transport_events.c:190 verify_log_result: Transport 'system-internet-tls' to remote 'tel.t-online.de' - 217.0.130.69:5061 - The certificate is untrusted
Also habe ich mich mal mit dem "bundle.crt" näher befaßt und per cat ein Bundle aus den beiden (zur Sicherheit frisch von der Telekom besorgten) Zertifikaten
Telekom Security ServerID OV Class 2 CA als lower und
T-TeleSec GlobalRoot Class 2 als Root zusammengeschraubt.
Ergebnis:
pjproject: <?>: SSL STATUS_FROM_SSL_ERR (status): Level: 0 err: <75497580> <error:0480006C:PEM routines::no start line> len: 0 peer: 217.0.147.197:5061
[Dec 9 19:33:09] ERROR[31871]: pjproject: <?>: ssl0xb590d118 Error loading certificate chain file '/etc/ssl/certs/ca-bundle.crt': no start line
Ach: die PEM-routines meckern? Also habe ich per OpenSSL die *.crt's in *.pem's umgewandelt und per cat zu einem bundle.pem gemacht (Du hatest ja oben schon von einer "...große(n) pem-Datei..." geschrieben. Bei der hier verwendeten Armbian-Distri ist die nicht dabei (ich habe jedenfalls keine gefunden).
Ergebnis:
res_pjsip/pjsip_transport_events.c:190 verify_log_result: Transport 'system-internet-tls' to remote 'tel.t-online.de' - 217.0.130.69:5061 - OK
Offenbar mag der Asterisk 22.6.0 keine *.crt Files...

Vielen Dank @gehtdoch, daß Du mich durch Deine Hinweise auf den richtigen Weg gebracht hast!
 
  • Like
Reaktionen: gehtdoch
Kostenlos!

Statistik des Forums

Themen
248,134
Beiträge
2,282,294
Mitglieder
377,354
Neuestes Mitglied
der_bruchpilot