Die SPDY-Protokollaushandlung findet während des ersten TLS-Handshakes statt.
Es gibt derzeit zwei Möglichkeiten, das Protokoll zu verhandeln: Das ältere Protokoll heißt NPN (http://tools.ietf.org/html/draft-agl-tls-nextprotoneg-04). In der ClientHello TLS-Nachricht sendet der Client die NPN-Erweiterung mit der ID 0x3374. Der Server antwortet mit einer ServerHello-TLS-Nachricht, die auch die Liste der vom Server unterstützten Protokolle auch in einer NPN-Erweiterung enthält. Der Client wählt dann das Protokoll und sendet seine Wahl verschlüsselt an den Server. Die neue Methode wurde für HTTP 2.0 entwickelt und heißt ALPN(). Die ClientHello TLS-Nachricht enthält die ALPN-Erweiterung mit der ID 0x10. Der Client sendet diesmal die Liste der unterstützten Protokolle und der Server antwortet mit einer ServerHello-TLS-Nachricht, die das vom Server ausgewählte Protokoll enthält, ebenfalls in einer ALPN-Erweiterung.
Sowohl in der NPN- als auch in der ALPN-Erweiterung wird die Liste der Protokolle als Zeichenfolgen wie http/1.1
oder spdy/3
gesendet.
Sobald das Protokoll ausgewählt wurde, wird der TLS-Handshake fortgesetzt und dann beginnen beide Parteien sofort das Protokoll zu sprechen, das sie gewählt haben.
Die einzige Möglichkeit, sich über die Aushandlung des Protokolls bewusst zu sein, besteht daher darin, TLS zu verwenden und einen Client zu verwenden, der die Protokollaushandlungserweiterungen verfügbar macht. Jeder Client macht das auf eine bestimmte Art und Weise, aber soweit ich weiß, gibt es noch keine Unterstützung für Bash-Skripte.
HAProxy zum Beispiel unterstützt sowohl NPN als auch ALPN (http://cbonte.github.io/haproxy-dconv/configuration-1.5.html) und Jetty 9.2 hat auch Unterstützung für NPN und ALPN (sowohl für Clients als auch für Server).
Andere Server wie Nginx oder Apache unterstützen NPN mit Patches für ALPN (da es sowieso von HTTP 2.0 benötigt wird).
NPN wird irgendwann verblassen; Google Adam Langley has stated, dass NPN zugunsten von ALPN veraltet ist.
Sie werden ein Programm schreiben, um dies zu tun, oder möchten Sie, dass dieses Programm für Sie geschrieben wird? –
Ich hatte gehofft, dass da draußen etwas bereit wäre, das ich in einem Bash-Skript verwenden könnte. – Jim