IETF-SSH archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

RE: SFTP version negotiation



We have not implemented version 5, and though I currently do not foresee
implementing version 6, the proposed version negotiation scheme based
upon the extended command could facilitate our implementation of
version 6 as the channel closing scheme that I mentioned would not
work with our implementation.  Because of this I favor this mechanism
of re-negotiating the version.

Richard Whalen

-----Original Message-----
From: Joseph Galbraith [mailto:galb-list%vandyke.com@localhost]
Sent: Tuesday, October 05, 2004 11:20 AM
To: Henrick Hellström
Cc: ietf-ssh%netbsd.org@localhost
Subject: Re: SFTP version negotiation


Henrick Hellström wrote:
> Just a thought...
> 
> What happens if a SFTP server supports v3 and v4, and a client that 
> supports v3 and v6 only connects?
> 
> According to the latest draft, they are supposed to start v4, since the 
> client will send v6 and the server supports at most v4, and v4 is the 
> least of these two numbers.
> 
> Quoted from draft 05:
> 
> 4. Protocol Initialization
> 
>    When the file transfer protocol starts, the client first sends a
>    SSH_FXP_INIT (including its version number) packet to the server. The
>    server responds with a SSH_FXP_VERSION packet, supplying the lowest
>    of its own and the client's version number.  Both parties should from
>    then on adhere to particular version of the protocol.

This has been a concern of mine for a while.  The best solution I've 
been able to come up with (better than closing channel, I think) is this:

 > If the client supports non-contigous version, for example,
 > versions 2,3, and 6, then the INIT/VERSION negotiation
 > is insufficient.  In order to gaurentee a successful
 > connection, the MUST send the highest version for which
 > it supports all previos version (because the server
 > might pick the version the client sends or any
 > previous version.)
 >
 > However, in order to work around this limit in the
 > deployed protocol implementations, after the
 > INIT/VERSION exchange is complete, if the version
 > negotiated is at least 3, the version where extensions was
 > introduced, the client MAY send the following extension
 > to attempt to negotiate a higher version:
 >
 >   byte SSH_FXP_EXTENDED
 >   uint32 request-id
 >   string "version-negotiate"
 >   uint32 highest version-supported
 >   uint32 2nd highest version-supported
 >   ...
 >   uint32 lowest version-supported
 >
 > The client must not send any other packets after sending
 > this extension until it recieves the response.  The server
 > responds with a similar response:
 >
 > The server then responds with:
 >
 >   byte SSH_FXP_EXTENDED_REPLY
 >   uint32 request-id
 >   uint32 highest version-supported
 >   uint32 2nd highest version-supported
 >   ...
 >   uint32 lowest version-supported
 >
 > The new negotiated version to use is the
 > first value that appears on both list, or,
 > in other words, the highest version supported
 > by both the client and the server.  This
 > version MUST be at least as high as the
 > previous negotiated version.
 >
 > The next packet sent after the "version-negotiate"
 > request by the client, and the next packet sent
 > by the server after the reply will conform to
 > the new version.
 >
 > The server includes it's entire list of supported
 > versions rather than just the negotiated version
 > in order to assist in trouble shooting on the
 > client side.

I believe this mechanism maintains backwards compatibility
and gives us the version exchange we now wish we'd had
originally :-)

Thanks,

Joseph



Home | Main Index | Thread Index | Old Index