mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
564 lines
20 KiB
Plaintext
564 lines
20 KiB
Plaintext
|
||
|
||
|
||
|
||
|
||
|
||
Network Working Group B. Greenblatt
|
||
Request for Comments: 2649 P. Richard
|
||
Category: Experimental August 1999
|
||
|
||
|
||
An LDAP Control and Schema for Holding Operation Signatures
|
||
|
||
Status of this Memo
|
||
|
||
This memo defines an Experimental Protocol for the Internet
|
||
community. It does not specify an Internet standard of any kind.
|
||
Discussion and suggestions for improvement are requested.
|
||
Distribution of this memo is unlimited.
|
||
|
||
Copyright Notice
|
||
|
||
Copyright (C) The Internet Society (1999). All Rights Reserved.
|
||
|
||
Abstract
|
||
|
||
In many environments clients require the ability to validiate the
|
||
source and integrity of information provided by the directory. This
|
||
document describes an LDAP message control which allows for the
|
||
retrieval of digitally signed information. This document defines an
|
||
LDAP v3 based mechanism for signing directory operations in order to
|
||
create a secure journal of changes that have been made to each
|
||
directory entry. Both client and server based signatures are
|
||
supported. An object class for subsequent retrieval are "journal
|
||
entries" is also defined. This document specifies LDAP v3 controls
|
||
that enable this functionality. It also defines an LDAP v3 schema
|
||
that allows for subsequent browsing of the journal information.
|
||
|
||
Table of Contents
|
||
|
||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
|
||
1.1 Audit Trail Mechanism . . . . . . . . . . . . . . . . . . . 2
|
||
1.2. Handling the Delete Operation . . . . . . . . . . . . . . . 5
|
||
2. Signed Results Mechanism . . . . . . . . . . . . . . . . . . 6
|
||
3. Security Considerations and Other Notes . . . . . . . . . . 7
|
||
4. References . . . . . . . . . . . . . . . . . . . . . . . . . 8
|
||
5. Authors' Addresses . . . . . . . . . . . . . . . . . . . . . 9
|
||
6. Full Copyright Statement . . . . . . . . . . . . . . . . . . 10
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 1]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
1. Introduction
|
||
|
||
In many environments clients require the ability to validiate the
|
||
source and integrity of information provided by the directory. This
|
||
document describes an LDAP message control which allows for the
|
||
retrieval of digitally signed information. The perspective of this
|
||
document is that the origin of the information that is stored in LDAP
|
||
v3 accessible directories is the LDAP v3 client that creates the
|
||
information. The source and integrity of the information is
|
||
guaranteed by allowing for the digital signing of the operations that
|
||
make changes to entries in the directory. The source and integrity
|
||
of an individual LDAP connection can be guaranteed by making use of
|
||
an underlying session layer that provides such services, such as TLS.
|
||
Note that the integrity of an individual connection does not, in and
|
||
of itself guarantee the integrity of the data that comes across the
|
||
connection. This is due to the fact that the LDAP server is only
|
||
capable of providing information that it has stored. In distributed
|
||
and replicated environments, the fact that an entry has been
|
||
successfully retrieved from a server may not be completely
|
||
reassuring, if the entry in question was replicated from an untrusted
|
||
domain.
|
||
|
||
By making use of public key technology, and creating digitally signed
|
||
transactions that are created by the LDAP v3 client as entries are
|
||
created and modified, a complete journal of the history of the entry
|
||
is available. Since each entry in the journal has been digitally
|
||
signed with the private key of the creator, or modifier of the entry,
|
||
the source and integrity of the directory entry can be validated by
|
||
verifying the signature of each entry in the journal. Note that not
|
||
all of the journal entries will have been signed by the same user.
|
||
|
||
1.1. Audit Trail Mechanism
|
||
|
||
Signed directory operations is a straightforward application of
|
||
S/MIME technology that also leverages the extensible framework that
|
||
is provided by LDAP version 3. LDAP version 3 is defined in [4], and
|
||
S/MIME is defined in [2]. The security used in S/MIME is based in
|
||
the definitions in [1]. The basic idea is that the submitter of an
|
||
LDAP operation that changes the directory information includes an
|
||
LDAP version 3 control that includes either a signature of the
|
||
operation, or a request that the LDAP server sign the operation on
|
||
the behalf of the LDAP client. The result of the operation (in
|
||
addition to the change of the directory information), is additional
|
||
information that is attached to directory objects, that includes the
|
||
audit trail of signed operations. The LDAP control is (OID =
|
||
1.2.840.113549.6.0.0):
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 2]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
SignedOperation ::= CHOICE {
|
||
signbyServer NULL,
|
||
signatureIncluded OCTET STRING
|
||
}
|
||
|
||
If the SignatureIncluded CHOICE is used, then the OCTET string is
|
||
just an S/MIME message of the multipart/signed variety, that is
|
||
composed of a single piece, that is the signature of the directory
|
||
operation. Multipart/signed MIME objects are defined in [3]. If the
|
||
SignbyServer CHOICE us used, then the LDAP server creates the
|
||
signature on behalf of the client, using its own identity and not the
|
||
identity of the client, in order to produce the audit trail entry.
|
||
In either case the successful result of processing the control is the
|
||
creation of additional information in the directory entry that is
|
||
being modified or created. The signature of the LDAP operation is
|
||
computed on the LDAPMessage prior to the inclusion of the
|
||
SignedOperation control. The procedure is as follows:
|
||
|
||
- Build LDAPMessage without the SignedOperation control
|
||
- Compute signature on the above LDAPMessage
|
||
- Create new LDAPMessage that includes the old MessageID,
|
||
protocolOp and any control fields from the previous LDAPMessage,
|
||
plus the computed signature formatted as an S/MIME message.
|
||
|
||
No control is defined for the server to return in the LDAPResult as
|
||
defined in [4]. The LDAP server MAY attempt to parse and verify the
|
||
signature included in the SignedOperation control, but is not
|
||
required to. The server can accept the signed operation without
|
||
verifying the signature. Signature verification can be quite a
|
||
lengthy operation, requiring complex certificate chain traversals.
|
||
This allows a more timely creation of the audit trail by the server.
|
||
Any LDAP client browsing the directory that retrieves the 'Changes'
|
||
(defined in the following paragraphs) attributes, should verify the
|
||
signature of each value according to the local signature verification
|
||
policies. Even if the LDAP server verifies the signature contained
|
||
in the singed operation, the LDAP client has no way of knowing what
|
||
policies were followed by the server in order to verify the
|
||
signature.
|
||
|
||
If the LDAP server is unable to verify the signature and wishes to
|
||
return an error then the error code unwillingToPerform(53) should be
|
||
returned, and the entire LDAP operation fails. In this situation, an
|
||
appropriate message (e.g. "Unable to verify signature") MAY be
|
||
included in the errorMessage of the LDAPResult. The SignedOperation
|
||
Control MAY be marked CRITICAL, and if it is CRITICAL then if the
|
||
LDAP Server performs the LDAP operation, then must include the
|
||
signature in the signedAuditTrail information.
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 3]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
The schema definition for the signedAuditTrail information is:
|
||
|
||
( 1.2.840.113549.6.1.0
|
||
NAME 'signedAuditTrail'
|
||
SUP top
|
||
AUXILIARY
|
||
MUST (
|
||
Changes
|
||
)
|
||
)
|
||
|
||
The format of the Changes attribute is:
|
||
|
||
( 1.2.840.113549.6.2.0
|
||
NAME 'Changes'
|
||
DESC 'a set of changes applied to an entry'
|
||
SYNTAX 'Binary' )
|
||
|
||
The actual format of the Changes attribute is:
|
||
|
||
Changes ::= SEQUENCE {
|
||
sequenceNumber [0] INTEGER (0 .. maxInt),
|
||
signedOperation [1] OCTET STRING }
|
||
|
||
The SignedOperation attribute is a multipart/signed S/MIME message.
|
||
Part 1 of the message is the directory operation, and part 2 is the
|
||
signature. Sequence number 0 (if present) always indicates the
|
||
starting point directory object as represented by the definitions in
|
||
"A MIME Content-Type for Directory Information", as defined in [5].
|
||
Subsequent sequence numbers indicate the sequence of changes that
|
||
have been made to this directory object. Note that the sequence of
|
||
the changes can be verified due to the fact that the signed directory
|
||
object will have a timestamp as part of the signature object, and
|
||
that the sequence numbering as part of the change attribute should be
|
||
considered to be an unverified aid to the LDAP client. Sequence
|
||
numbers are meaningful only within the context of a single directory
|
||
entry, and LDAP servers are not expected to maintain these sequence
|
||
numbers across all entries in the directory.
|
||
|
||
Some LDAP servers will only allow operations that include the
|
||
SignedOperation control. This is indicated by the inclusion of a
|
||
'signedDirectoryOperationSupport' attribute in the rootDSE. This
|
||
attribute is defined as:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 4]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
1.2.840.113549.6.2.2
|
||
NAME 'signedDirectoryOperationSupport'
|
||
DESC 'how many of the LDAP operations must be signed'
|
||
SYNTAX 'Integer' SINGLE-VALUE )
|
||
|
||
The 'signedDirectoryOperationSupport' attribute above may have one of
|
||
the values, '0', '1' or '2' with the following meanings:
|
||
|
||
- '0' Directory Operations may be signed
|
||
- '1' Directory Operations must always be signed
|
||
- '2' Directory Operations must never be signed
|
||
|
||
Some LDAP servers will desire that the audit trail be continuous, and
|
||
not contain any gaps that would result from unsigned operations.
|
||
Such server will include a signature on each LDAP operation that
|
||
changes a directory entry, even when the LDAP client does not include
|
||
a signed-Operation control.
|
||
|
||
1.2. Handling the Delete Operation
|
||
|
||
The LDAP Delete operation represents an interesting case for Signed
|
||
Directory Operations. This is due to the case that subsequent to the
|
||
successful completion of the Delete Operation, the object that would
|
||
have held the latest 'Changes' attribute no longer exists. In order
|
||
to handle this situation, a new object class is defined to represent
|
||
a directory object that has been deleted.
|
||
|
||
( 1.2.840.113549.6.1.2
|
||
NAME 'zombieObject'
|
||
SUP top
|
||
STRUCTURAL
|
||
MUST (
|
||
Cn $ Changes $ OriginalObject
|
||
)
|
||
)
|
||
|
||
The format of the OriginalObject attribute is:
|
||
|
||
( 1.2.840.113549.6.2.1
|
||
NAME OriginalObject
|
||
DESC 'The LDAP URL of an object that has been deleted from the
|
||
directory' SYNTAX 'Binary' )
|
||
|
||
The OriginalObject attribute contains the URL of the object that was
|
||
deleted from the directory. It is formatted in accordance with RFC
|
||
2255. Directory servers that comply with this specification SHOULD
|
||
create a zombieObject when performing the delete Operation that
|
||
contains a SignedOperation LDAPControl. The Cn attribute of the
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 5]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
zombieObject is synthesized by the LDAP server, and may or may not be
|
||
related to the original name of the directory entry that was deleted.
|
||
All changes attributes that were attached to the original entry are
|
||
copied over to the zombieObject. In addition the LDAP Server MUST
|
||
attach the signature of the Delete operation as the last successful
|
||
change that was made to the entry.
|
||
|
||
2. Signed Results Mechanism
|
||
|
||
A control is also defined that allows the LDAP v3 client to request
|
||
that the server sign the results that it returns. It is intended
|
||
that this control is primarily used in concert with the LDAPSearch
|
||
operation. This control MAY be marked as CRITICAL. If it is marked
|
||
as CRITICAL and the LDAP Server supports this operation, then all
|
||
search results MUST be returned with a signature as attached in the
|
||
SignedResult control if it is willing to sign results for this user.
|
||
If the server supports this control but does not wish to sign the
|
||
results for this user then the error code unwillingToPerform(53)
|
||
should be returned, and the LDAP search will have failed. In this
|
||
situation, an appropriate message (e.g. "Unwilling to sign results
|
||
for you!") MUST be included in the errorMessage of the LDAPResult.
|
||
If the LDAPSigType has the value FALSE then the client is requesting
|
||
that the server not sign this operation. This may be done in
|
||
situations where servers are configured to always sign their
|
||
operations.
|
||
|
||
The LDAP control to include in the LDAP request is (OID =
|
||
1.2.840.113549.6.0.1):
|
||
|
||
DemandSignedResult ::= LDAPSigType
|
||
|
||
LDAPSigType ::= BOOLEAN
|
||
|
||
In response to a DemandSignedResult control, the LDAP v3 server will
|
||
return a SignedResult control in addition to the normal result as
|
||
defined by the operation (assuming that the server understands the
|
||
con- trol, and is willing to perform it). The SignedResult control
|
||
MUST NOT be marked CRITICAL. Some LDAP v3 servers may be configured
|
||
to sign all of their operations. In this situation the server always
|
||
returns a SignedResult control, unless instructed otherwise by the
|
||
DemandSigne-dResult Control. Since the SignedResult control is not
|
||
marked critical, the LDAP client is allowed to ignore it. The
|
||
signature field below includes the signature of the enitre LDAPResult
|
||
formatted as an S/MIME pkcs-7/signature object, as defined in [2].
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 6]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
The procedure for creating the signature of the signedResult control
|
||
is the same as the procedure for the creation of the signedOperation
|
||
control. The LDAP control in the LDAP response is (OID =
|
||
1.2.840.113549.6.0.2):
|
||
|
||
SignedResult ::= CHOICE {
|
||
signature OCTET STRING }
|
||
|
||
3. Security Considerations and Other Notes
|
||
|
||
The base OIDs are:
|
||
|
||
rsadsiLdap ::= {1 2 840 113549 6}
|
||
rsadsiLdapControls ::= {1 2 840 113549 6 0}
|
||
rsadsiLdapObjectClasses ::= {1 2 840 113549 6 1}
|
||
rsadsiLdapAttributes ::= {1 2 840 113549 6 2}
|
||
|
||
|
||
The complete ASN.1 module for this specification is:
|
||
|
||
SIGNEDOPERATIONS DEFINITIONS ::=
|
||
BEGIN
|
||
|
||
SignedOperation ::= CHOICE {
|
||
signbyServer NULL,
|
||
signatureIncluded OCTET STRING
|
||
}
|
||
|
||
Changes ::= SEQUENCE {
|
||
sequenceNumber [0] INTEGER (0 .. maxInt),
|
||
signedOperation [1] OCTET STRING }
|
||
|
||
DemandSignedResult ::= LDAPSigType
|
||
|
||
LDAPSigType ::= BOOLEAN
|
||
|
||
SignedResult ::= CHOICE {
|
||
signature OCTET STRING }
|
||
|
||
|
||
END
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 7]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
If any of the controls in this specification are supported by an LDAP
|
||
v3 server then that server MUST make available its certificate (if
|
||
any) in the userCertificate attribute of its rootDSE object. The
|
||
UserCertificate attribute is defined in [6], and contains the public
|
||
key of the server that is used in the creation of the various
|
||
signatures defined in this specification.
|
||
|
||
It is not the intention of this specification to provide a mechanism
|
||
that guarantees the origin and integrity of LDAP v3 operations. Such
|
||
a service is best provided by the use of an underlying protocol such
|
||
as TLS [8]. TLS defines additional features such as encryption and
|
||
compression. This specification does not define support for
|
||
encrypted operations.
|
||
|
||
This memo proposes protocol elements for transmission and storage of
|
||
the digital signatures of LDAP operations. Though the LDAP server
|
||
may have verified the operation signatures prior to their storage and
|
||
subsequent retrieval, it is prudent for LDAP clients to verify the
|
||
signatures contained in the chained attribute upon their retrieval.
|
||
The issuing Certification Authorities of the signer's certificate
|
||
should also be consulted in order to determine if the signer's
|
||
private key has been compromised or the certificate has been
|
||
otherwise revoked. Security considerations are discussed throughout
|
||
this memo.
|
||
|
||
4. References
|
||
|
||
[1] Kaliski, B., "PKCS 7: Cryptographic Message Syntax Version 1-5",
|
||
RFC 2315, March 1998.
|
||
|
||
[2] Dusse, S., Hoffman, P., Ramsdell, B., Lundblade, L. and L.
|
||
Repka., "S/MIME Version 2 Message Specification", RFC 2311, March
|
||
1998.
|
||
|
||
[3] Galvin, J., Murphy, S., Crocker, S. and N. Freed, "Security
|
||
Multiparts for MIME: Multipart/Signed and Multipart/Encrypted",
|
||
RFC 1847, October 1995.
|
||
|
||
[4] Wahl, M., Howes, T. and S. Kille, "Lightweight Directory Access
|
||
Protocol (v3)", RFC 2251, December 1997.
|
||
|
||
[5] Howes, T., Smith, M. and F. Dawson, "A MIME Content-Type for
|
||
Directory Information", RFC 2425, September 1998.
|
||
|
||
[6] Wahl, M., "A Summary of the X.500(96) User Schema for use with
|
||
LDAPv3", RFC 2256, December 1997.
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 8]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
[7] Howes, T. and M. Smith, "The LDAP URL Format", RFC 2255, December
|
||
1997.
|
||
|
||
[8] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC
|
||
2246, January 1999.
|
||
|
||
5. Authors' Addresses
|
||
|
||
Bruce Greenblatt
|
||
San Jose, CA 95119
|
||
USA
|
||
|
||
Phone: +1-408-224-5349
|
||
EMail: bgreenblatt@directory-applications.com
|
||
|
||
|
||
Pat Richard
|
||
Xcert Software, Inc.
|
||
Suite 1001 - 701 W. Georgia
|
||
Vancouver, BC
|
||
CANADA V6G 1C9
|
||
|
||
EMail: patr@xcert.com
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 9]
|
||
|
||
RFC 2649 LDAP Control and Schema August 1999
|
||
|
||
|
||
6. Full Copyright Statement
|
||
|
||
Copyright (C) The Internet Society (1999). All Rights Reserved.
|
||
|
||
This document and translations of it may be copied and furnished to
|
||
others, and derivative works that comment on or otherwise explain it
|
||
or assist in its implementation may be prepared, copied, published
|
||
and distributed, in whole or in part, without restriction of any
|
||
kind, provided that the above copyright notice and this paragraph are
|
||
included on all such copies and derivative works. However, this
|
||
document itself may not be modified in any way, such as by removing
|
||
the copyright notice or references to the Internet Society or other
|
||
Internet organizations, except as needed for the purpose of
|
||
developing Internet standards in which case the procedures for
|
||
copyrights defined in the Internet Standards process must be
|
||
followed, or as required to translate it into languages other than
|
||
English.
|
||
|
||
The limited permissions granted above are perpetual and will not be
|
||
revoked by the Internet Society or its successors or assigns.
|
||
|
||
This document and the information contained herein is provided on an
|
||
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
||
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
||
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
||
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
||
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
||
Acknowledgement
|
||
|
||
Funding for the RFC Editor function is currently provided by the
|
||
Internet Society.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Greenblatt & Richard Experimental [Page 10]
|
||
|