@@ -425,41 +425,59 @@ \subsubsection{\mbox{\tt ivoa\_x509}}\label{sec:ivoa-x509}
425425
426426The \verb |ivoa_x509 | authentication scheme indicates that the service
427427will accept X.509 client certificates as authentication permits,
428- and describes how to acquire such certificates.
428+ and optionally describes how to acquire a suitable certificate.
429+
430+ The standard usage model for X.509 certificates is that
431+ a person or organisation obtains a certificate from a
432+ Certification Authority (CA) once its identification has
433+ been verified by a Registration Authority.
434+
435+ A client in posession of a client certificate can then use it to
436+ sign TLS (HTTPS) connections, and the service can examine the signature
437+ to authenticate the identity of the client.
438+ Such authentication will succeed if the service trusts the signing CA.
429439
430440\begin {description }
431441 \item [Scheme name:] \verb |ivoa_x509 |
432442 \item [Parameters:] \mbox {}
433443 \begin {itemize }
434- \item \verb |access_url | (required ) ---
435- indicates where to get the certificate,
444+ \item \verb |access_url | (optional ) ---
445+ indicates where to get a suitable certificate,
436446 see Section~\ref {sec:access-url }
437- \item \verb |standard_id | (required) ---
447+ \item \verb |standard_id | (required iff \verb | access_url | is present ) ---
438448 indicates how to authenticate at \verb |access_url |,
439449 see Section~\ref {sec:standard-id }
440450 \end {itemize }
441- \item [Login response:] PEM-encoded X.509 certificate chain
442- including private key
451+ \item [Login response (if used) :] PEM-encoded X.509 certificate chain
452+ including private key
443453 \item [Scope:] Origin of challenge URL
444454\end {description }
445455
456+ The \verb |ivoa_x509 | challenge exists in two forms:
457+ with and without the \verb |access_url |/\verb |standard_id | parameter pair.
458+ These optional parameters advise the client how to obtain a certificate
459+ for use within the domain of the challenge if it does not already have one.
446460
447- A client in posession of a client certificate can use it to
448- sign TLS (HTTPS) connections, and the service can examine the signature
449- to authenticate the identity of the client.
461+ For either form of the challenge,
462+ if the client is in possession of a certificate
463+ signed by a CA it expects the service to trust, it may use it to
464+ sign requests to protected resources within the domain of the challenge.
450465
451- To use this scheme, the client must present a username and password
466+ If the client does not hold any such certificate,
467+ and the \verb |access_url |/\verb |standard_id | pair is present,
468+ it may obtain one by presenting credentials
452469to the endpoint given by the \verb |access_url | parameter,
453470in the form defined by the \verb |standard_id | parameter.
454471If authentication is successful, a 200 OK response must be returned
455472whose body is an X.509 certificate chain including its private key,
456473in PEM format. The \header {Content-Type} header of this response
457- should be `` {\tt application/x-pem-file}'' . \todo {should it?}
458- Current implementations support only RSA encoding.
459- \todo {I copied this from a code comment but I don't know what it means}
474+ should be `` {\tt application/x-pem-file}'' .
460475If authentication fails, a 401 or 403 response should be returned.
461476Once in possession of the returned certificate,
462477the client can use it to sign subsequent requests to protected resources.
478+ Certificates obtained in this way may not be usable in all X.509 contexts
479+ (i.e. may not be signed by a widely trusted CA),
480+ but should be usable within the domain of the current challenge.
463481
464482Since client certificates achieve authentication by signing requests
465483using public key cryptography, they cannot be stolen by third parties,
@@ -863,18 +881,18 @@ \subsection{Mandatory authentication with certificates}
863881% https://ws-uv.canfar.net/youcat/capabilities,
864882% whose certificate acquisition endpoint is at
865883% https://ws.cadc-ccda.hia-iha.nrc-cnrc.gc.ca/cred/generate.
866- % But at time of writing it wasn't really working (no parameters in challenge)
867- % and it uses optional, rather than mandatory, authentication.
884+ % However YouCat uses optional, rather than mandatory, authentication.
868885
869886Probe the VOSI-capabilities endpoint of a TAP service to check
870887for authentication modality (Section~\ref {sec:modalities }):
871888{\footnotesize
872889\begin {verbatim }
873890% curl --head https://abc.example.net/tap/capabilities
874891HTTP/1.1 401 Unauthorized
892+ www-authenticate: Bearer
893+ www-authenticate: ivoa_x509
875894www-authenticate: ivoa_x509 standard_id="ivo://ivoa.net/sso#BasicAA",
876895 access_url="https://xyz.example.net/cert/generate"
877- www-authenticate: Bearer
878896\end {verbatim }
879897}
880898
@@ -883,10 +901,16 @@ \subsection{Mandatory authentication with certificates}
883901is required to access the service.
884902The \verb |Bearer | challenge (\rfc {6750}) means we can authenticate with
885903a Bearer Token if we have or know how to get one, but we don't.
886- We can however use the \verb |ivoa_x509 | challenge
887- (Section~\ref {sec:ivoa-x509 });
888- it has a \verb |standard_id | of \verb |BasicAA | (Section~\ref {sec:standard-id })
889- so transmit user credentials using
904+ The unparameterised \verb |ivoa_x509 | challenge means
905+ the client can, in principle, authenticate with a certificate
906+ from any valid CA and not just one issued by the endpoint in the
907+ parameterised challenge.
908+ Without having such a certificate however we can use
909+ the parameterised \verb |ivoa_x509 | challenge
910+ (Section~\ref {sec:ivoa-x509 }) which advises one way to acquire
911+ a suitable certificate.
912+ It has a \verb |standard_id | of \verb |BasicAA | (Section~\ref {sec:standard-id })
913+ so we transmit user credentials using
890914HTTP Basic Authentication to the \verb |access_url |:
891915
892916{\footnotesize
0 commit comments