XKMS, sigla en inglés para XML Key Management Specification (Especificación XML para manejo de claves), usa el framework de servicios web para facilitar a los desarrolladores asegurar la comunicación entre sus aplicaciones utilizando la infraestructura de clave pública (PKI). XKMS es un protocolo desarrollado por el World Wide Web Consortium (W3C) que describe la distribución y registro de claves públicas. Además es compatible para su uso en conjunto con XML-SIG (Especificación XML de firma digital) y XML-Enc (Especficación XML de cifrado).
XKMS consta de dos partes:
En ambos casos el principal objetivo es delegar toda la complejidad de implementaciones tradicionales de PKI a un servidor externo permitiendo a un cliente interactuar con él.
Suponemos que el cliente tiene su llave privada Private, posee una palabra clave Password y que recibió del servidor una clave auth para autenticación.
Auth = HMAC-SHA1 (auth, 0x1) Pass = HMAC-SHA1 (HMAC-SHA1 (Password, 0x2), 0x3)
Petición
Respuesta
Para XKISS la sintaxís de las peticiones es de manera similar.
<Locate>
<Query>
<ds:KeyInfo>
<ds:RetrievalMethod
URI="http://www.PKeyDir.test/Certificates/01293122"
Type="http://www.w3.org/2000/09/xmldsig#X509Data"/>
</ds:KeyInfo>
</Query>
<Respond>
<string>KeyName</string>
<string>KeyValue</string>
</Respond>
</Locate>
<LocateResult>
<Result>Success</Result>
<Answer>
<ds:KeyInfo>
<ds:KeyName>O=XMLTrustCernter.org OU="Crypto"
CN="Alice"</ds:KeyName>
<ds:KeyValue>...</ds:KeyValue>
</ds:KeyInfo>
</Answer>
</LocateResult>
<Validate>
<Query>
<Status>Valid</Status>
<ds:KeyInfo>
<ds:KeyName>...</ds:KeyName>
<ds:KeyValue>...</ds:KeyValue>
</ds:KeyInfo>
</Query>
<Respond>
<string>KeyName</string>
<string>KeyValue</string>
</Respond>
</Validate>
<ValidateResult>
<Result>Success</Result>
<Answer>
<KeyBinding>
<Status>Valid</Status>
<KeyID>http://www.xmltrustcenter.org/assert/20010120-39</KeyID>
<ds:KeyInfo>
<ds:KeyName>...</ds:KeyName>
<ds:KeyValue>...</ds:KeyValue>
</ds:KeyInfo>
<ValidityInterval>
<NotBefore>2000-09-20T12:00:00</NotBefore>
<NotAfter>2000-10-20T12:00:00</NotAfter>
</ValidityInterval>
</KeyBinding>
</Answer>
</ValidateResult>
Protocolo SOAP y definición WSDL para servicios web