summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc7076.txt
diff options
context:
space:
mode:
authorThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
committerThomas Voss <mail@thomasvoss.com> 2024-11-27 20:54:24 +0100
commit4bfd864f10b68b71482b35c818559068ef8d5797 (patch)
treee3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc7076.txt
parentea76e11061bda059ae9f9ad130a9895cc85607db (diff)
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc7076.txt')
-rw-r--r--doc/rfc/rfc7076.txt619
1 files changed, 619 insertions, 0 deletions
diff --git a/doc/rfc/rfc7076.txt b/doc/rfc/rfc7076.txt
new file mode 100644
index 0000000..8c669b7
--- /dev/null
+++ b/doc/rfc/rfc7076.txt
@@ -0,0 +1,619 @@
+
+
+
+
+
+
+Independent Submission M. Joseph
+Request for Comments: 7076 J. Susoy
+Category: Informational P6R, Inc
+ISSN: 2070-1721 November 2013
+
+
+ P6R's Secure Shell Public Key Subsystem
+
+Abstract
+
+ The Secure Shell (SSH) Public Key Subsystem protocol defines a key
+ distribution protocol that is limited to provisioning an SSH server
+ with a user's public keys. This document describes a new protocol
+ that builds on the protocol defined in RFC 4819 to allow the
+ provisioning of keys and certificates to a server using the SSH
+ transport.
+
+ The new protocol allows the calling client to organize keys and
+ certificates in different namespaces on a server. These namespaces
+ can be used by the server to allow a client to configure any
+ application running on the server (e.g., SSH, Key Management
+ Interoperability Protocol (KMIP), Simple Network Management Protocol
+ (SNMP)).
+
+ The new protocol provides a server-independent mechanism for clients
+ to add public keys, remove public keys, add certificates, remove
+ certificates, and list the current set of keys and certificates known
+ by the server by namespace (e.g., list all public keys in the SSH
+ namespace).
+
+ Rights to manage keys and certificates in a particular namespace are
+ specific and limited to the authorized user and are defined as part
+ of the server's implementation. The described protocol is backward
+ compatible to version 2 defined by RFC 4819.
+
+Status of This Memo
+
+ This document is not an Internet Standards Track specification; it is
+ published for informational purposes.
+
+ This is a contribution to the RFC Series, independently of any other
+ RFC stream. The RFC Editor has chosen to publish this document at
+ its discretion and makes no statement about its value for
+ implementation or deployment. Documents approved for publication by
+ the RFC Editor are not a candidate for any level of Internet
+ Standard; see Section 2 of RFC 5741.
+
+
+
+
+
+Joseph & Susoy Informational [Page 1]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ http://www.rfc-editor.org/info/rfc7076.
+
+Copyright Notice
+
+ Copyright (c) 2013 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ This document is subject to BCP 78 and the IETF Trust's Legal
+ Provisions Relating to IETF Documents
+ (http://trustee.ietf.org/license-info) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document.
+
+Table of Contents
+
+ 1. Introduction ....................................................3
+ 2. Terminology .....................................................3
+ 3. Overview of Extensions to the Public Key Subsystem ..............3
+ 3.1. Extended Status Codes ......................................4
+ 3.2. The Version Packet .........................................4
+ 3.3. The Namespace Attribute ....................................4
+ 4. New Operations ..................................................5
+ 4.1. Adding a Certificate .......................................5
+ 4.2. Removing a Certificate .....................................6
+ 4.3. Listing Certificates .......................................6
+ 4.4. Listing Namespaces .........................................7
+ 5. Extending Public Key Operations .................................8
+ 5.1. Adding a Public Key ........................................8
+ 5.2. Removing a Public Key ......................................8
+ 5.3. Listing Public Keys ........................................9
+ 6. Security Considerations .........................................9
+ 7. IANA Considerations ............................................10
+ 8. References .....................................................10
+ 8.1. Normative References ......................................10
+ 8.2. Informative References ....................................10
+
+
+
+
+
+
+
+
+
+
+
+
+
+Joseph & Susoy Informational [Page 2]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+1. Introduction
+
+ This document describes a new protocol that builds on the protocol
+ defined in RFC 4819 that can be used to configure public keys and
+ certificates in an implementation-independent fashion. The concept
+ of a namespace is added to the protocol's operations; it allows the
+ client to organize keys and certificates by application or
+ organizational structure.
+
+ P6R's Secure Shell Public Key Subsystem has been designed to run on
+ top of the Secure Shell transport layer [3] and user authentication
+ protocols [4]. It provides a simple mechanism for the client to
+ manage the public keys and certificates on the server related to that
+ client. These keys and certificates are normally used for
+ authentication of the client to a service, but they can be used for
+ encrypting results back to the client as well. Uploaded keys and
+ certificates are meant to be able to configure all protocols running
+ on a server (e.g., SSH, SSL, KMIP [8]) that use keys and
+ certificates, as well as the applications that run on a server.
+
+ This document should be read only after reading the Secure Shell
+ Public Key Subsystem [1] document. The new protocol described in
+ this document builds on and is meant to be backwards compatible with
+ the protocol described in [1].
+
+2. Terminology
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+ document are to be interpreted as described in RFC 2119 [2].
+
+3. Overview of Extensions to the Public Key Subsystem
+
+ The Public Key Subsystem provides a server-independent mechanism for
+ clients to add public keys, remove public keys, list the current
+ public keys known by the server, add certificates, remove
+ certificates, and list the current set of certificates known by the
+ server. This secure key distribution mechanism is implemented by a
+ new SSH subsystem with the name of "publickey@p6r.com".
+
+
+
+
+
+
+
+
+
+
+
+
+Joseph & Susoy Informational [Page 3]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+3.1. Extended Status Codes
+
+ The status code gives the status in a more machine-readable format
+ (suitable for localization) and can have the following values:
+
+ SSH_PUBLICKEY_CERTIFICATE_NOT_FOUND 192
+ SSH_PUBLICKEY_CERTIFICATE_NOT_SUPPORTED 193
+ SSH_PUBLICKEY_CERTIFICATE_ALREADY_PRESENT 194
+ SSH_PUBLICKEY_ACTION_NOT_AUTHORIZED 195
+ SSH_PUBLICKEY_CANNOT_CREATE_NAMESPACE 196
+
+ The meaning of the failure codes is as implied by their names. See
+ Security Considerations for the use of the failure code:
+ SSH_PUBLICKEY_ACTION_NOT_AUTHORIZED.
+
+3.2. The Version Packet
+
+ Both sides MUST start a connection by sending a version packet that
+ indicates the version of the protocol they are using.
+
+ string "version"
+ uint32 protocol-version-number
+
+ This document defines version 3 of the new protocol. We are using
+ version 3 so that it can be backward compatible with the protocol
+ defined by RFC 4819 [1].
+
+3.3. The Namespace Attribute
+
+ The "namespace" attribute is added as an extension to what was
+ described in RFC 4819. The purpose of this attribute is to be able
+ to organize the uploaded keys and certificates into groups where each
+ group represents an application or organization structure. This
+ attribute is a string that should not be longer than 300 characters
+ and MUST be specified in UTF-8 format [5].
+
+ This new protocol uses the "ssh" namespace for the manipulation of
+ public keys in an SSH server and should be considered as the default
+ namespace when none is provided.
+
+ As a convention, namespaces used for protocols are lowercase strings
+ of the protocol's standard abbreviation. For example, "ssl" should
+ be the namespace used for the Secure Sockets Layer protocol.
+ Namespaces for applications should contain the product and vendor's
+ name. To help determine what namespaces already exist on a server, a
+ new operation "list-namespaces" is defined in Section 4.
+
+
+
+
+
+Joseph & Susoy Informational [Page 4]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+4. New Operations
+
+ P6R's Public Key Subsystem extends the functionality defined in RFC
+ 4819 with the following operations: add-certificate,
+ remove-certificate, list-certificates, and list-namespaces.
+
+4.1. Adding a Certificate
+
+ If the client wishes to add a certificate, the client sends:
+
+ string "add-certificate"
+ string certificate format name
+ string certificate blob
+ boolean overwrite
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ bool critical
+ repeated attribute-count times
+
+ This request MUST include at least the "namespace" attribute so that
+ the server knows where to save the certificate. Only one namespace
+ attribute can be used per an add-certificate request. It is possible
+ for the same user to save the same certificate into multiple
+ namespaces, but this must be done with several separate
+ add-certificate requests.
+
+ If the namespace appearing in an add-certificate request does not
+ already exist on a server, then it is created by this operation.
+ However, if the user is not authorized to create a namespace, the
+ server MUST return SSH_PUBLICKEY_CANNOT_CREATE_NAMESPACE.
+
+ If the overwrite field is false and the specified certificate already
+ exists in the given namespace, the server MUST return
+ SSH_PUBLICKEY_CERTIFICATE_ALREADY_PRESENT. If the server returns
+ this, the client SHOULD provide an option to the user to overwrite
+ the certificate. If the overwrite field is true and the specified
+ key already exists in the given namespace but cannot be overwritten,
+ the server MUST return SSH_PUBLICKEY_ACCESS_DENIED.
+
+ However, a user may not be authorized to add a certificate to the
+ specified namespace. If the user does not have permission to add a
+ certificate, then the server MUST return
+ SSH_PUBLICKEY_ACTION_NOT_AUTHORIZED.
+
+ Examples of possible "certificate format names" are: "X509",
+ "pgp-sign-rsa", and "pgp-sign-dss". The format of the public key and
+ certificate blobs are detailed in Section 6.6, "Public Key
+
+
+
+Joseph & Susoy Informational [Page 5]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+ Algorithms", of the SSH Transport Protocol document [3], where X.509
+ certificates are to be encoded using a DER format [6] [7] in a
+ certificate blob.
+
+4.2. Removing a Certificate
+
+ If the client wishes to remove a certificate, the client sends:
+
+ string "remove-certificate"
+ string certificate format name
+ string certificate blob
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ repeated attribute-count times
+
+ This request MUST include at least the "namespace" attribute so that
+ the server knows from where to delete the certificate. Only one
+ namespace attribute can be used per remove-certificate request. The
+ server MUST attempt to remove the certificate from the appropriate
+ location.
+
+ However, a user may not be authorized to remove a certificate from
+ the specified namespace. If the user does not have permission to
+ remove the certificate, then the server MUST return
+ SSH_PUBLICKEY_ACTION_NOT_AUTHORIZED.
+
+ Examples of possible "certificate format names" are: "X509",
+ "pgp-sign-rsa", and "pgp-sign-dss".
+
+4.3. Listing Certificates
+
+ If the client wishes to list the known certificates, the client
+ sends:
+
+ string "list-certificates"
+
+ The server will respond with zero or more of the following responses:
+
+ string "certificate"
+ string certificate format name
+ string certificate blob
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ repeated attribute-count times
+
+
+
+
+
+Joseph & Susoy Informational [Page 6]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+ There is no requirement that the responses be in any particular
+ order. Whilst some server implementations may send the responses in
+ some order, client implementations should not rely on responses being
+ in any order.
+
+ This response MUST include at least the "namespace" attribute so that
+ a client can tell in which namespace the certificate resides. Only
+ one namespace attribute can be used per list-certificate request.
+
+ Following the last "certificate" response, a status packet MUST be
+ sent.
+
+4.4. Listing Namespaces
+
+ If the client wishes to know existing namespaces on the server, it
+ sends:
+
+ string "list-namespaces"
+
+ The server will respond with zero or more of the following responses:
+
+ string "namespace"
+ string namespace name
+
+ It is possible that not all namespaces will be visible to every
+ authenticated user. In this case, the responding server will return
+ a subset of existing namespaces. See Security Considerations below.
+
+ Following the last "namespace" response, a status packet MUST be
+ sent.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Joseph & Susoy Informational [Page 7]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+5. Extending Public Key Operations
+
+ In addition to adding new operations, this document describes
+ extensions to the operations defined in RFC 4819.
+
+5.1. Adding a Public Key
+
+ If the client wishes to add a public key, the client sends:
+
+ string "add"
+ string public key algorithm name
+ string public key blob
+ boolean overwrite
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ bool critical
+ repeated attribute-count times
+
+ This request MAY include one "namespace" attribute so that a client
+ can save the public key into a specific namespace. It is possible
+ for the same user to save the same key into multiple namespaces, but
+ this requires multiple add requests.
+
+ If the namespace appearing in an add public key request does not
+ already exist on a server, then it is created by this operation.
+ However, if the user is not authorized to create a namespace the
+ server MUST return SSH_PUBLICKEY_CANNOT_CREATE_NAMESPACE,
+
+5.2. Removing a Public Key
+
+ If the client wishes to remove a public key, the client sends:
+
+ string "remove"
+ string public key algorithm name
+ string public key blob
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ bool critical
+ repeated attribute-count times
+
+ This extension allows attributes to be added to a remove request.
+ This request MAY include one "namespace" attribute so that a client
+ can remove the public key from a specific namespace.
+
+
+
+
+
+
+Joseph & Susoy Informational [Page 8]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+5.3. Listing Public Keys
+
+ If the client wishes to list the known public keys, the client sends:
+
+ string "list"
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ bool critical
+ repeated attribute-count times
+
+ This extension allows attributes to be added to a list request. This
+ request MAY include one "namespace" attribute so that a client can
+ list the public keys from a specific namespace.
+
+ The server will respond with zero or more of the following responses:
+
+ string "publickey"
+ string public key algorithm name
+ string public key blob
+ uint32 attribute-count
+ string attrib-name
+ string attrib-value
+ repeated attribute-count times
+
+ This response MAY include the "namespace" attribute so that a client
+ can tell in which namespace the key resides.
+
+6. Security Considerations
+
+ This protocol assumes that it is run over a secure channel and that
+ the endpoints of the channel have been authenticated. Thus, this
+ protocol assumes that it is externally protected from network-level
+ attacks.
+
+ This protocol provides a mechanism that allows key and certificate
+ material to be uploaded and manipulated into a server application.
+ It is the responsibility of the server implementation to enforce
+ access controls that may be required to limit any particular user's
+ access to the data in a namespace. For example, one user may be
+ allowed to list only the contents of a namespace but not add or
+ remove keys or certificates to/from it. The server MUST return
+ SSH_PUBLICKEY_ACTION_NOT_AUTHORIZED when a user's action goes against
+ its defined access controls.
+
+
+
+
+
+
+
+Joseph & Susoy Informational [Page 9]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+ This protocol requires the client to assume that the server will
+ correctly implement and observe attributes applied to keys.
+ Implementation errors in the server could cause clients to authorize
+ keys and certificates for access they were not intended to have, or
+ to apply fewer restrictions than were intended.
+
+7. IANA Considerations
+
+ Although Section 3.1 defines four new status codes, these are in the
+ 'Private Use' range of IANA's Publickey Subsystem Status Codes
+ registry as defined by Section 6.6.1 ("Conventions") in [1]. No IANA
+ actions are required for this document.
+
+8. References
+
+8.1. Normative References
+
+ [1] Galbraith, J., Van Dyke, J., and J. Bright, "Secure Shell Public
+ Key Subsystem", RFC 4819, March 2007.
+
+ [2] Bradner, S., "Key words for use in RFCs to Indicate Requirement
+ Levels", BCP 14, RFC 2119, March 1997.
+
+ [3] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) Transport
+ Layer Protocol", RFC 4253, January 2006.
+
+ [4] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH)
+ Authentication Protocol", RFC 4252, January 2006.
+
+ [5] Yergeau, F., "UTF-8, a transformation format of ISO 10646", STD
+ 63, RFC 3629, November 2003.
+
+ [6] Cooper, D., Santesson, S., Farrell, S., Boeyen, S., Housley, R.,
+ and W. Polk, "Internet X.509 Public Key Infrastructure
+ Certificate and Certificate Revocation List (CRL) Profile", RFC
+ 5280, May 2008.
+
+ [7] ITU-T Recommendation X.690 (2002) | ISO/IEC 8825-1:2002,
+ Information technology -- ASN.1 encoding rules: Specification of
+ Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and
+ Distinguished Encoding Rules (DER).
+
+8.2. Informative References
+
+ [8] OASIS, "Key Management Interoperability Protocol (KMIP) 1.1",
+ January 2013, <http://docs.oasis-open.org/kmip/spec/v1.1/os/
+ kmip-spec-v1.1-os.html>.
+
+
+
+
+Joseph & Susoy Informational [Page 10]
+
+RFC 7076 P6R's Secure Shell Public Key Subsystem November 2013
+
+
+Authors' Addresses
+
+ Mark Joseph, PhD
+ P6R, Inc
+ 1840 41st Ave
+ Suite 102-139
+ Capitola, CA 95010
+ US
+
+ Phone: +1 888 452 2580 (x702)
+ EMail: mark@p6r.com
+
+
+ Jim Susoy
+ P6R, Inc
+ 1840 41st Ave
+ Suite 102-139
+ Capitola, CA 95010
+ US
+
+ Phone: +1 888 452 2580 (x701)
+ EMail: jim@p6r.com
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Joseph & Susoy Informational [Page 11]
+