Akenti Certificate Specification
|
Security Hompage
|
This document describes both the internal certificate classes that are used by the Akenti policy engine, and the Akenti native or canonical string formats of the certificates. The classes are defined in the source directory akentiServer/certs. There are a number of elements which are used in constructing the AkentiCertificates. The Akenti elements are defined in the source directory akentiServer/certs/elements The base elements are defined in the source directory akentiServer/shared/net and akentiServer/shared/security.
The external string formats are generated by the writeObject methods for each class. They basically consist of ordered ASCII values for each component separated by a single space character. If values include significant spaces they are escaped by \'s. A \ is escaped as \\. Where there can be 0 or more than 1 values, the values are preceeded by an integer count. In the Format definition, components which can have 0 or more values will be followed by *, components which can have 1 or more values will be followed by +.
Akenti certificates are generally stored in files as an XML version of
the certificate for readability, followed by the ASCII canonical form
(for debugging), followed by signed version of the certifcate. The signed
certificate is surround by PEM tags:
-----BEGIN AKENTI <TYPE> CERTIFICATE-----
base64 encoding of the canonicalform with the signature appended
-----END AKENTI <TYPE> CERTIFICATE-----
The Akenti policy
engine only uses the signed certificate. The Certificate Generators use the
XML part. The certificate XML is defined in Akenti Certificate Schema.
Thus programs that parse such files, need to search for the begin tag and ignore any other contents of the file.
| Format | <multi-line-text>\n
-----BEGIN AKENTI <TYPE> CERTIFICATE-----\n <akenti canonical cert>\n -----END AKENTI <TYPE> CERTIFICATE----- |
URL {
string protocol // connection protocol: one of http, ldap, file
string host // host to which to connect
int port // port to which to connect
string file // file location on target machine
URLHandler handler // pointer to implementation for the specific protocol
}
The external representation of a URL is simply a string as defined in the
Akenti class Directory.
Examples
<URL>http://itg.www.lbl.gov/Akenti</URL>
<URL>http://itg.www.lbl.gov:8080/Projects/Akenti</URL>
<URL>file:/usr/local/mrt/Certificates</URL>
| Canonical Format | protocol:[//host[:port]]/file |
| Example1 | http://itg.www.lbl.gov/Akenti |
| Example2 | http://itg.www.lbl.gov:8080/Projects/Akenti |
| Example3 | file:/usr/local/mrt/Certificates |
typedef pair<string, string> Pair;
DistinguishedName {
vector<Pair> components
}
Example
<UserDN>/C=US/O=LBNL/OU=DSD/CN=Abdelilah Essiari</UserDN>
| Canonical Format | /<id>=<value> |
| Example | /C=US/O=LBNL/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA |
Example
<PublicKey> DER representation of public key</PublicKey>
| Canonical Format | <length of DER encoding><space><DER encoding> |
AkentiPrincipal {
DistinguishedName name // DN of the principal
DistinguishedName guarantor // DN of the CA that issued a Identity
}
Example<Principal> <UserDN> /C=US/O=LBNL/CN=Abdelilah Essiari</UserDN> <CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN> </Principal>
| Canonical Format | name<space>guarantor |
| Example | /C=US/O=LBNL/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA |
AkentiIssuer {
AkentiPrincipal issuerAndCA // DN of the principal and its CA
vector<Directory> idDirs // optional list of directories in which
// the issuer's X509 cert may be found
}
Example<Issuer> <UserDN> /C=US/O=LBNL/CN=Abdelilah Essiari</UserDN> <CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN> </Issuer> <Issuer> <UserDN> /C=US/O=LBNL/CN=Abdelilah Essiari</UserDN> <CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN> <URL>ldap://idcg-ca.lbl.gov</URL> </Issuer>
| Canonical Format | name<space>guarantor |
| Example1 | /C=US/O=LBNL/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 0 |
| Example2 | /C=US/O=LBNL/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 1 ldap://idcg-ca.lbl.gov |
This element contains a string represention of a directory URL. This type is defined in certs/elements/Directory.hpp. The XML tag for this type is the same as for the URL type.
Directory {
string url // string representation of a URL
}
Examples
<URL>http://itg.www.lbl.gov/Akenti</URL>
<URL>ldap:/idcg-ca.lbl.gov</URL>
<URL>file:/user/local/mrt/Certificated</URL>
| Format | rep |
| Example1 | http://itg.www.lbl.gov/Akenti |
| Example2 | ldap:/idcg-ca.lbl.gov |
| Example3 | file:/usr/local/mrt/Certificates |
AttributeInfo {
Type type // SYSTEM(0), X509(1), AKENTI(2), or EXT_AUTH(3)
string name // name of attribute
string value // value of attribute
vector<DistinguishedName> CAs // issuers for X509 attributes
vector<AkentiPrincipal> auths // Attrribute Cert issuers for AKENTI attrs
// OR external authorities for EXT_AUTH attrs
vector<URL> attrDirs // optional list of places to search for
// attribute certs, or to contact
// external authorities
vector<string> ext_auth_args // optional arguments to an external authority
}
Examples:
<AttributeInfo type="X509">
<AttrName>CN</AttrName>
<AttrValue>Mary R. Thompson </AttrValue>
<CADN> /O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA </CADN>
</AttributeInfo>
<AttributeInfo type="AKENTI">
<AttrName>group</AttrName>
<AttrValue>dc-lbnl</AttrValue>
<Principal>
<UserDN>/C=US/O=LBNL/OU=DSD/CN=Abdelilah Essiari</UserDN>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</Principal>
<Principal>
<UserDN>/C=US/O=LBNL/OU=DSD/CN=Mary R. Thompson</UserDN>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</Principal>
<AttrDirs>
<URL>http:/itg-www.lbl.gov/~mrt/Certificates</URL>
</AttrDirs>
</AttributeInfo>
| Canonical Format | type<space>name<space>value<space>[[caSize<space>cas+]|[<space>issuersSize <space>issuers+ ]] [ <space>attrDirSize<space>attrDirs*] [ <space>argSize<space>ext_auth_args* ] |
| Example1 | 1 CN Mary\ R.\ Thompson 1 /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA |
| Example2 | 2 group dc-lbnl 2 /C=US/O=LBNL/OU=DSD/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA /C=US/O=LBNL/OU=DSD/CN=Mary\Thompson /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 1 http:/itg-www.lbl.gov/~mrt/Certificates |
Condition {
string constraint;
vector<AttributeInfo> attributeInfos;
}
The constraint is expressed in a relational language whose grammar
is as follows:
constraint_expr ::= and_expr { `||' and_expr }*White space is generally ignored except within a value element where multiple white space between words is compressed to one space. digits are 0-9, letters are a-z,A-Z. Attr are not case-sensitive, but values are.
and_expr ::= prim_expr { `&&' prim_expr }*
prim_expr ::= av_expr | ( constraint_expr )
av_expr ::= attr rel_op value
rel_op ::= `=' | ` !=' | `< ` | `<=' |' >' | `>='
attr ::= word
value ::= word {word}*
word ::= {char}+
char ::= digit | letter | _ | # | . | , | / | : | ;
Note that the characters '&', '<' and '>' are special characters in xml. So if you are manually writing an xml version of an Akenti certificate they must either be written as &, < and > or the entire constraint can be enclosed in a <![CDATA[ ...]]> clause. If you are using our GUI certificate generators, they will do this for you.
Examples:
<Condition>
<Constraint>group=teamA</Constraint>
<AttributeInfo type="AKENTI">
<AttrName>group</AttrName>
<AttrValue>teamA</AttrValue>
<Principal>
<UserDN>/C=US/O=LBNL/OU=DSD/CN=Abdelilah Essiari</UserDN>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</Principal>
<AttrDirs>
<URL>http://www-itg.lbl.gov/~aes/Certificates</URL>
</AttrDirs>
</AttributeInfo>
</Condition>
<Condition>
<Constraint>(ou=NERSC)&&(cn=Mary R. Thompson)</Constraint>
<AttributeInfo type="X509">
<AttrName>ou</AttrName>
<AttrValue>NERSC</AttrValue>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</AttributeInfo>
<AttributeInfo type="X509">
<AttrName>cn</AttrName>
<AttrValue>Mary R. Thompson</AttrValue>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</AttributeInfo>
</Condition>
<Condition>
<Constraint><![CDATA[(group=researchers || (time > 6pm && time
< 8am)) && (O=LBNL))]]> </Constraint>
<AttributeInfo type="AKENTI" >
<AttrName>group</AttrName>
<AttrValue>researchers</AttrValue>
<Principal>
<UserDN>/C=US/O=LBNL/OU=DSD/CN=Abdelilah Essiari</UserDN>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</IdDirs>ldap://idcg-ca.lbl.gov </IdDirs>
</Principal>
</AttributeInfo>
<AttributeInfo type="SYSTEM">
<AttrName>time</AttrName>
<AttrValue>6pm</AttrValue>
</AttributeInfo>
<AttributeInfo type="SYSTEM">
<AttrName>time</AttrName>
<AttrValue>8am</AttrValue>
</AttributeInfo>
<AttributeInfo type="X509">
<AttrName>O</AttrName>
<AttrValue>LBNL</AttrValue>
<CADN>/O=LBNL/OU=Certificate Authorities/CN=LBNL-Grid-CA</CADN>
</AttributeInfo>
</Condition>
| Format | constraint<space>attrInfoSize<space>attrInfo+ |
| Example1 | group=teamA 1 2 group teamA 1 /C=US/O=LBNL/OU=DSD/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 0 1 http://www-itg.lbl.gov/~aes/Certificates |
| Example2 | (ou=NERSC) || (cn=Mary R. Thompson) 2 1 ou NERSC /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 1 cn Mary R. Thompson /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 0 |
| Example3 | (group=researchers || (time > 6pm && time < 8am)) && (O=LBNL) 4 2 group researchers 1 /C=US/O=LBNL/OU=DSD/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 1 ldap://idcg-ca.lbl.gov 0 0 time 6pm 0 time 8am 1 O LBNL /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 0 |
UseCondition {
Condition condition // boolean constraint and corresponding attributeInfos
bool isScopeLocal // if true UC applies only tothe local resource
// if false UC applies to the whole subtree
bool critical // if true, this UseCondition MUST be satisified
}
Examples
There is no coresponding XML element. It is part of the UseConditionCert
element.
| Format | isScopeLocal<space>critical<space>Condition |
| Example | 1 1 (role=tester)&(o=LBNL) 2 2 role tester 2 /C=US/O=LBNL/OU=DSD/CN=Abdelilah\ Essiari /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA /C=US/O=LBNL/OU=DSD/CN=Mary\Thompson /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA 1 o LBNL 1 /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA |
Note that the certificate includes the public key of the CA, which Akenti uses to get a trusted copy of a self-signed CA public key. The idDirs are where Akenti will search for X.509 certificates for principals that have signed UseCondition or Attribute certificates. Currently the CRLdirs are optional since not all CAs implement such a mechanism. But if this field is omitted, Akenti has no way to check if an X509 certificate has been revoked. This type is defined in the file certs/elements/CertificateAuthorityInfo.hpp.
CertificateAuthorityInfo {
DistinguishedName ca // Certificate Authority to be trusted
vector<Certificate> certificate // CA's x.509 identity cert or chain
// of certs including public key
vector<Directory> idDirs // Dirs where the CA stores the certificates
// that it issues
vector<Directory> crlDirs // Pointer to some type of mechanism to
// handle certificate revocation
}
Examples
<CAInfo>
<CADN>/O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA</CADN>
<X509Certificate>-----BEGIN CERTIFICATE-----
MIICvzCCAiigAwIBAgIBDzANBgkqhkiG9w0BAQUFADBbMRkwFwYDVQQKExBET0Ug
U2NpZW5jZSBHcmlkMSAwHgYDVQQLExdDZXJ0aWZpY2F0ZSBBdXRob3JpdGllczEc
MBoGA1UEAxMTQ2VydGlmaWNhdGUgTWFuYWdlcjAeFw0wMDA4MjkyMjI4MDJaFw0w
MTA4MjkyMjI4MDJaMHgxDTALBgNVBAoTBEdyaWQxLjAsBgNVBAoTJUxhd3JlbmNl
IEJlcmtlbGV5IE5hdGlvbmFsIExhYm9yYXRvcnkxIDAeBgNVBAsTF0NlcnRpZmlj
YXRlIEF1dGhvcml0aWVzMRUwEwYDVQQDEwxMQk5MLUdyaWQtQ0EwgZ8wDQYJKoZI
hvcNAQEBBQADgY0AMIGJAoGBAL2t4aX933WXYlofuY+L+16Tdl/KxpAammyfcW8u
kHHT6RYDjaQdfV1FpNEqfSrRjKNwGGGkrG4XHZWiUO0Di0AlBN04lsRY6jB68l6B
5byujfZv+8EeCI2c1ObBLYZYi4lToJf0sm0Hpn3GD7PZBv6BVHLOuwEFDl9z9Dnc
DFDdAgMBAAGjdjB0MBEGCWCGSAGG+EIBAQQEAwIAhzAOBgNVHQ8BAf8EBAMCAcYw
HQYDVR0OBBYEFIn+csPVyp+iprpYUIu1SziMQiDxMA8GA1UdEwEB/wQFMAMBAf8w
HwYDVR0jBBgwFoAUm85P8ry9WHAx1fIyDn6eveJRFOcwDQYJKoZIhvcNAQEFBQAD
gYEAHindWQ4P4VUmJVt5sUGA05hSAZriDJDDnkvkm/9AR7xgGxtsy21QruhUVe2E
eVFBws85zbwRqMpfUQyE/xHhUcka2GQTaKlBlcEjZTMnsh27Si2PMYU/UPr/PIpq
kBkoxVV1bMWRK57mG2tzzTy9j0wkct4G5IjEsrYNDzW6U3E=
-----END CERTIFICATE-----
</X509Certificate>
<IdDirs>
<URL>ldap:/idcg-ca.lbl.gov</URL>
</IdDirs>
</CAInfo>
| Format | ca<space>certificate<space>idDirSize<space>idDir*<space>crlDirSize<space>crlDir* |
| Example | /O=LBNL/OU=Certificate\ Authorities/CN=LBNL-Grid-CA -----BEGIN CERTIFICATE----- MIICvzCCAiigAwIBAgIBDzANBgkqhkiG9w0BAQUFADBbMRkwFwYDVQQKExBET0Ug U2NpZW5jZSBHcmlkMSAwHgYDVQQLExdDZXJ0aWZpY2F0ZSBBdXRob3JpdGllczEc MBoGA1UEAxMTQ2VydGlmaWNhdGUgTWFuYWdlcjAeFw0wMDA4MjkyMjI4MDJaFw0w MTA4MjkyMjI4MDJaMHgxDTALBgNVBAoTBEdyaWQxLjAsBgNVBAoTJUxhd3JlbmNl IEJlcmtlbGV5IE5hdGlvbmFsIExhYm9yYXRvcnkxIDAeBgNVBAsTF0NlcnRpZmlj YXRlIEF1dGhvcml0aWVzMRUwEwYDVQQDEwxMQk5MLUdyaWQtQ0EwgZ8wDQYJKoZI hvcNAQEBBQADgY0AMIGJAoGBAL2t4aX933WXYlofuY+L+16Tdl/KxpAammyfcW8u kHHT6RYDjaQdfV1FpNEqfSrRjKNwGGGkrG4XHZWiUO0Di0AlBN04lsRY6jB68l6B 5byujfZv+8EeCI2c1ObBLYZYi4lToJf0sm0Hpn3GD7PZBv6BVHLOuwEFDl9z9Dnc DFDdAgMBAAGjdjB0MBEGCWCGSAGG+EIBAQQEAwIAhzAOBgNVHQ8BAf8EBAMCAcYw HQYDVR0OBBYEFIn+csPVyp+iprpYUIu1SziMQiDxMA8GA1UdEwEB/wQFMAMBAf8w HwYDVR0jBBgwFoAUm85P8ry9WHAx1fIyDn6eveJRFOcwDQYJKoZIhvcNAQEFBQAD gYEAHindWQ4P4VUmJVt5sUGA05hSAZriDJDDnkvkm/9AR7xgGxtsy21QruhUVe2E eVFBws85zbwRqMpfUQyE/xHhUcka2GQTaKlBlcEjZTMnsh27Si2PMYU/UPr/PIpq kBkoxVV1bMWRK57mG2tzzTy9j0wkct4G5IjEsrYNDzW6U3E= -----END CERTIFICATE----- 1 ldap:/idcg-ca.lbl.gov 0 |
UseCondIssuerGroup {
vector<AkentiPrincipal> issuers // stakeholders who may issue UseCond certs
vector<URL> locators // URLs to search for UseCondition certs
}
Examples
<UseCondIssuerGroup> <Principal> <UserDN>/C=US/O=LBNL/OU=DSD/CN=Mary R. Thompson</UserDN> <CADN>/C=US/O=LBNL/OU=Certificate Authorities/CN=IDCG-CA</CADN> </Principal> <URL> http://www-itg.lbl.gov/~mrt/Certificates/</URL> </UseCondIssuerGroupl>
| Format | issuerSize<space>issuer+<space>locatorSize<space>locator+ |
| Example | 1 /C=US/O=LBNL/OU=DSD/CN=Mary\ R.\ Thompson /C=US/O=LBNL/OU=Certificate\ Authorities/CN=IDCG-CA 1 http://www-itg.lbl.gov/~mrt/Certificates/ |
ConditionalActions {
Condition condition;
vector<string> actions;
bool critical;
}
Example
<ConditionalActions critical="true">
<Condition>
<Constraint>AvailDisk>2Gig </Constraint>
<AttributeInfo type="SYSTEM">
<AttrName>AvailDisk</AttrName>
<AttrValue>2Gig</AttrValue>
</AttributeInfo>
</Condition>
</ConditionalActions>
| Format | condition<space>actionsSize<space>actions+<space>critical |
| Example | AvailDisk>2Gig 1 0 AvailDisk 2Gig 2 read write 1 |
AkentiCertificate {
string type // certificate type
int version // certificate format version
string id // certificate's unique ID
AkentiIssuer guarantor // principal that issued and signed the certificate
UtcTime notBefore // Certificate not valid before this date
UtcTime notAfter // Certificate not valid after this date
string signatureAlg // name of hashMac and encryption algorithm
// used to sign this certifacate
// information specific to the type of certificate
string signature // signature of the actual certificate
}
Certificate type is one of: UseCondition, Attribute,
Policy, Capability, Cache.
Examples
<AkentiCertificate>
<SignablePart>
<Header type="Attribute" SignatureDigestAlg="RSA-MD5" CanonAlg="AkentiV1">
<Version ver="V2"></Version>
<ID id="mrtnote.lbl.gov#78a152ca#SunNov1417:11:57PST1999"></ID>
<Issuer>
<UserDN>/C=US/O=Lawrence Berkeley National Laboratory/OU=ICSD/
CN=Mary R. Thompson </UserDN>
<CADN>/C=US/O=Lawrence Berkeley National Laboratory/OU=ICSD/
CN=IDCG-CA</CADN>
</Issuer>
<ValidityPeriod start="000111224101Z" end="010110224101Z"/>
</Header>
(...)
</SignablePart>
</AkentiCertificate>
| Format | type<space>version<space>ID<space>issuer<space>notBefore<space>notAfter <space>;signatureAlg<space><type specific cert info><space>signature |
| Example | Attribute V2 mrtnote.lbl.gov#78a152ca#SunNov1417:11:57PST1999 /C=US/O=LBNL/OU=DSD/CN=Mary\ R.\ Thompson /C=US/O=LBNL/OU=Certificate\Authorities/CN=IDCG-CA 0 000111224101Z 010110224101Z 3600 RSA-MD5 |
UseCondCertificate {
string resource // name of resource or resource subtree
UseCondition useCondition // boolean expression that user must satisfy
// plus the issuers and CAs for each attribute
// used by the constraint
vector<string> actions // defined by stakeholder,
// interpreted by resource gateway
}
Example
<AkentiCertificate>
<SignablePart>
<Header type="UseCondition" SignatureDigestAlg="RSA-MD5" CanonAlg="AkentiV1">
(...)
</Header>
< UseConditionCert scope="sub-tree" critical="false">
<ResourceName>DieselCollab/PREServer/chad </ResourceName>
<Condition>
<Constraint>(( cn = Diane Gomes ) || ( cn = Mary R. Thompson ))</Constraint>
<AttributeInfo type="X509">
<AttrName>cn</AttrName>
<AttrValue>Diane Gomes</AttrValue>
<CADN>/C=US/O=Diesel Combustion Collaboratory/OU=SNL/
CN=DieselCert.ca.sandia.gov </CADN>
</AttributeInfo>
<AttributeInfo type="X509">
<AttrName>cn</AttrName>
<AttrValue>Mary R. Thompson</AttrValue>
<CADN>/C=US/O=LBNL/OU=ICSD/CN=IDCG-CA</CADN>
</AttributeInfo>
</Condition>
<Rights>read,execute </Rights>
</UseConditionCert>
</SignablePart>
</AkentiCertificate>
Format
CertificateHead<space>resource<space>scope<space>enable<space>useCondition<space>
actionsSize<space>actions*<space>subjectCAsSize<space>subjectCAs+
Example
<CertificateHead> DieselCollab/PREServer/chad 1 0 (\ (\ cn\ =\ Diane\ Gomes\ )\ ||\ (\ cn\ =\ Mary\ R.\ Thompson\ )\ ) 2 1 cn Diane\ Gomes 1 /C=US/O=Diesel\ Combustion\ Collaboratory/OU=SNL/CN=DieselCert.ca.sandia.gov 1 cn Mary\ R.\ Thompson 1 /C=US/O=LBNL/OU=ICSD/CN=IDCG-CA 2 read execute
AttributeCertificate {
AkentiPrincipal principal // to whom this attribute applies
string attribute // attribute name
string value // attribute value
Condition condition // Optional constraint on this attribute
}
An optional condition may be applied to the attribute. It is expressed in
the same fomat as is used in the UseCondition certificate. However,
the X509 attibute type does not make sense here since the user's
DN is already completely defined by the principal field. The other attribute
types can be used to limit the validity of this attribute to a specific time
of day, or make it contingent on the user holding another attribute.
When attribute certificates are stored in files they are named by a hash encoding of the subject Name and CA of the principal, the name and value of the attribute plus a numeric suffix.The suffix starts at 0 and increments by one until a name that is unique to the local directory is found.
Examples
<AkentiCertificate>
<SignablePart>
<Header type="Attribute" SignatureDigestAlg="RSA-MD5" CanonAlg="AkentiV1">
(...)
</Header>
<AttributeCert>
<SubjectAndCA>
<UserDN>/C=US/O=LBNL/OU=ICSD/CN=Mary R. Thompson</UserDN>
<CADN>/C=US/O=LBNL/OU=Certificate Authorities/CN=IDCG-CA</CADN>
</SubjectAndCA>
<AttrName>group</AttrName>
<AttrValue>staff</AttrValue>
</AttributeCert>
</SignablePart>
</AkentiCertificate>
<AkentiCertificate>
<SignablePart>
<Header type="Attribute" SignatureDigestAlg="RSA-MD5" CanonAlg="AkentiV1">
(...)
</Header>
<AttributeCert>
<SubjectAndCA>
<UserDN>/C=US/O=LBNL/OU=ICSD/CN=Mary R. Thompson</UserDN>
<CADN>/C=US/O=LBNL/OU=Certificate Authorities/CN=IDCG-CA</CADN>
</SubjectAndCA>
<AttrName>group</AttrName>
<AttrValue>sysadmin</AttrValue>
<Condition>
<Constraint>(IP=131.243.2.11)</Constraint>
<AttributeInfo type="SYSTEM">
<AttrName>IP</AttrName>
<AttrValue>131.243.2.11</AttrValue>
</AttributeInfo>
</Condition>
</AttributeCert>
</SignablePart>
</AkentiCertificate>
| Format | certificateHead<space>principal<space>attribute<space>value<space>condition |
| Example1 no condition | <CertificateHead>/C=US/O=LBNL/OU=ICSD/CN=Mary\ R.\ Thompson /C=US/O=LBNL /OU=Certificate\ Authorities/CN=IDCG-CA group staff |
| Example2 with condition | <CertificateHead>/C=US/O=LBNL/OU=ICSD/CN=Mary\ R.\ Thompson /C=US/O=LBNL /OU=Certificate\ Authorities/CN=IDCG-CA group sysadmin IP=131.243.2.11 0 IP 131.243.2.11 |
PolicyCertificate {
string resourceName // resource to which this policy applies
vector<CertificateAuthorityInfo> CAInfo // Certificates for CA's that
// are trusted to sign X509 certs.
vector<UseCondIssuerGroup> useCondIssuerGroup // stakeholders and directories in
// which they publish their UseCondtions
vector<URL> attrDirs // directories in which to search for
// attribute certificates
long cacheTime // maximum cache time in seconds
}
Example
<AkentiCertificate>
<SignablePart>
<Header type="Policy" SignatureDigestAlg="RSA-MD5" CanonAlg="AkentiV1">
(...)
</Header>
<PolicyCert>
<ResourceName>DCC Servers</ResourceName>
<CAInfo>
<CADN>/c=US/O=LBNL/OU==ICSD/CN=IDCG-CA</CADN>
<X509Certificate>
"-----BEGIN CERTIFICATE-----
\MIIC1jCCAj+gAwIBAgIBbzANBgkqhkiG9w0BA
QQFADBeMQswCQYDVQQGEwJVUzEuMCwGA1UEChMlTGF3cmVuY2UgQmVya2VsZXkgTm
F0aW9uYWwgTGFib3JhdG9yeTENMAsGA1UECxMESUNTRDEQMA4GA1UEAxMHSURDRy1
DQTAeFw05OTA3MjgxODAyMjNaFw0wMTA3MjcxODAyMjNaMF4xCzAJBgNVBAYTAlVT
MS4wLAYDVQQKEyVMYXdyZW5jZSBCZXJrZWxleSBOYXRpb25hbCBMYWJvcmF0b3J5M
Q0wCwYDVQQLEwRJQ1NEMRAwDgYDVQQDEwdJRENHLUNBMIGfMA0GCSqGSIb3DQEBAQ
UAA4GNADCBiQKBgQDArly+tnX5eW7v4KT5CVf/IwR8rDkqniDUq34x/wqrKbM0AY+
SV2hEHz+MCDgSlmPOXfwEplXW5IYYXqJ3+dK06et7mUodOhAB+0b6a8dVwul1+gRw
Ei80vft4+WvDUUHMZQiq3UqFTsPN+09sW+2paqXNQZvBq2r+6/ovM4OqVwIDAQABo
4GjMIGgMBEGCWCGSAGG+EIBAQQEAwIABzBLBglghkgBhvhCAQMEPhY8aHR0cHM6Ly
9pZGNnLWNhLmxibC5nb3YvY21zP29wPWNoZWNrUmV2b2NhdGlvbiZzZXJpYWxOdW1
iZXI9MB8GA1UdIwQYMBaAFAkHHatS78FaazO5C5Ty5e35luD7MB0GA1UdDgQWBBQJ
Bx2rUu/BWmszuQuU8uXt+Zbg+zANBgkqhkiG9w0BAQQFAAOBgQBDM7EfXJcsN4kqP
9nURhduCf4vuQ62QA+HsP06SkopofXdNrKnlN/hVb85C66jcvUKQhbuNlX+2M0HgP
uBVr7NbplVUeNeMmRFlA/RCeNtdqlO/MxMXpJYQb2ci39Crabt5gBWEk+0RRc/nHx
Fco+e8GiZ5S9kZ52J6frmhfYnCcA==
\-----END CERTIFICATE-----"
</X509Certificate>
<IdDirs>
<URL> ldap://idcg-ca.lbl.gov/</URL>
</IdDirs>
</CAInfo>
<UseCondIssuerGroup>
<Principal>
<UserDN>/C=US/O=LBNL/OU=ICSD/CN=Mary R. Thompson</UserDN>
<CADN> /C=US/O=LBNL/OU=ICSD/CN=IDCG-CA</CADN>
</Principal>
<URL> http://www-itg.lbl.gov/~mrt/Certificates/</URL>
<UseCondIssuerGroup>
<AttrDirs>
<URL>file:/usr/mrt/Attributes</URL>
<URL> http://idcg-ds.lbl.gov/~kjackson/Certificates/</URL>
</AttrDirs>
<CacheTime>1800</CacheTime>
</PolicyCert>
</SignablePart>
</AkentiCertificate>
| Format | CertificateHead<space>ResourceName<space>certificateAuthorityInfosSize<space> certificateAuthorityInfos* <space>useCondIssuerGroupSize<space>useCondIssuerGroup+ <space>attrDirsSize<space>attrDirectories*<space>cacheTime |
| Example | <CertificateHead>DCC/servers 1 /C=US/O=Lawrence\ Berkeley\ National\ Laboratory/OU=ICSD/CN=IDCG-CA" "-----BEGIN CERTIFICATE----- \MIIC1jCCAj+gAwIBAgIBbzANBgkqhkiG9w0BA QQFADBeMQswCQYDVQQGEwJVUzEuMCwGA1UEChMlTGF3cmVuY2UgQmVya2VsZXkgTm F0aW9uYWwgTGFib3JhdG9yeTENMAsGA1UECxMESUNTRDEQMA4GA1UEAxMHSURDRy1 DQTAeFw05OTA3MjgxODAyMjNaFw0wMTA3MjcxODAyMjNaMF4xCzAJBgNVBAYTAlVT MS4wLAYDVQQKEyVMYXdyZW5jZSBCZXJrZWxleSBOYXRpb25hbCBMYWJvcmF0b3J5M Q0wCwYDVQQLEwRJQ1NEMRAwDgYDVQQDEwdJRENHLUNBMIGfMA0GCSqGSIb3DQEBAQ UAA4GNADCBiQKBgQDArly+tnX5eW7v4KT5CVf/IwR8rDkqniDUq34x/wqrKbM0AY+ SV2hEHz+MCDgSlmPOXfwEplXW5IYYXqJ3+dK06et7mUodOhAB+0b6a8dVwul1+gRw Ei80vft4+WvDUUHMZQiq3UqFTsPN+09sW+2paqXNQZvBq2r+6/ovM4OqVwIDAQABo 4GjMIGgMBEGCWCGSAGG+EIBAQQEAwIABzBLBglghkgBhvhCAQMEPhY8aHR0cHM6Ly 9pZGNnLWNhLmxibC5nb3YvY21zP29wPWNoZWNrUmV2b2NhdGlvbiZzZXJpYWxOdW1 iZXI9MB8GA1UdIwQYMBaAFAkHHatS78FaazO5C5Ty5e35luD7MB0GA1UdDgQWBBQJ Bx2rUu/BWmszuQuU8uXt+Zbg+zANBgkqhkiG9w0BAQQFAAOBgQBDM7EfXJcsN4kqP 9nURhduCf4vuQ62QA+HsP06SkopofXdNrKnlN/hVb85C66jcvUKQhbuNlX+2M0HgP uBVr7NbplVUeNeMmRFlA/RCeNtdqlO/MxMXpJYQb2ci39Crabt5gBWEk+0RRc/nHx Fco+e8GiZ5S9kZ52J6frmhfYnCcA== -----END CERTIFICATE-----" 1 ldap://idcg-ca.lbl.gov 0 1 1 /C=US/O=LBNL/OU=DSD/CN=Mary\ R.\ Thompson /C=US/O=LBNL/OU=Certificate\Authorities/CN=IDCG-CA 1 http://www-itg.lbl.gov/~mrt/Certificates/ 2 file:/usr/mrt/Attributes http://idcg-ds.lbl.gov/~krj/Certificates/ 1800 |
The Capability Certificate is returned by the Akenti policy engine. When it is returned from an Akenti server it may be signed, depending on the settings in the configuration file. This type is defined in the file certs/CapabilityCertificateImpl.hpp .
CapabilityCertificate {
string resource // resource to which this capability applies
AkentiPrincipal principal // user to whom this capability applies
PublicKey publicKey // publicKey of user to whom the
// capability applies
vector<string> Actions // actions that are allowed
vector<ConditionalActions> ConditionalActions
//actions with additional constraints
}
| Format | CertificateHead<space>resource<space>principal<space>publicKey<space> actionsSize<space>UncondActions*<space> UncondActionsSize<space>CondActions* |
CacheCertificate {
vector<AKCertHolder> holders;
}
| Format | CertificateHead<space>CertHolder.size<space>CertHolder+ |
AkentiX509Certificate{
string signable // opaque string containing the base64 encoded
// DER encoded identity certificate
AkentiPrincipal principal // subject of the Certificate and the issuer(CA)
int SerialNumber // extracted from X.509
URL revocationURL // URL to where the CA keeps its revocation list
// extracted from X.509
PublicKey subjectPublicKey; // extracted from X.509
Certificate cert; // DER encoded ASN1 X.509 certiticate
}
This certificate is not written out in this form. The writeObject method writes out the contained X.509 cert.
AKCertHolder{
AkentiCertificate cert; // cached certificate
int level-verified; // level at which the cert has been verified
// -1 = did not verify, 0 = not yet
UtcTime notBefore; // cached cert cannot be used before this time
UtcTime notAfter; // cached cert cannot be used after this time
}
| Page last modified: Wednesday, 09-Mar-2005 16:52:24 PST Contact: MRThompson@lbl.gov <Akenti development group> Credits:Distributed Security research and development is funded by the U.S. Dept. of Energy, Office of Science, Office of Advanced Scientific Computing Research, Mathematical, Information, and Computational Sciences Division. Privacy and site security notice to Users |
![]() |
![]() |
![]() |