Hi,

Excerpts from Paul Berry's message of Fri Sep 17 14:12:54 -0400 2010:
> I'm feeling unsettled about Mathias's proposal, for a couple of reasons:
> 
> 1. It relies on some indirector features that we don't currently support
> (410 errors, head requests, post requests, more richly detailed http error
> messages, richer support of "accept" headers, and find requests with no
> key).  Granted, some of these features would be nice to add, but I'm not
> sure it makes sense to do them just so that we can make the REST API for
> cert signing take this form.
>

I totally agree with you. I've outlined a proposal that may be
complicated to implement due to technical limitation of the current
puppet code.

I've mainly approached that from an API perspective - not knowing much
about the implementation details.

> 2. It puts a bigger burden than I would like to put on clients of the REST
> API to understand how the certificate system works.  In my original
> proposal, if a client wanted to know the status of a hostname,  they would
> issue a single request and get the status back in an intuitive format.  If
> we go with Mathias's suggestions, the client has to issue several related
> requests and synthesize the result.  If the client gets this wrong, they may
> falsely conclude that a certificate is valid when it isn't, and that could
> lead to a lot of customer confusion.

Well - I depends what you'd like to do with the state. For the example
above, asking if a certificate is valid is:

 1. HEAD https://<master>/<environment>/certificate/<cert_name>

    200 Ok --> means the certificate is valid

Other possible status are:

    404 Not found --> means the certificate doesn't exist
    410 Gone --> means the certificate is revoked.

What could be added here is a custom status that says there is csr
waiting for <cert_name>:

    499 Requested

> By having a specific REST call to
> query the status of a cert (analogous to "puppet cert --verify") we make
> sure it is our code that is determining the validity, so we can be sure to
> do it right.
>

Right - I also pondered that issue. Now that I think of it the REST API
could modified as follow:

> > <state> is one of:
> > - 'requested' if the host has sent the server a certificate request
> >   but no certificate has been issued.


 1. Http request:
    HEAD https://<master>/<environment>/certificate_request/<cert_name>

    Http response:
    200 OK

With the addition that when the certificate has been issued (ie the csr
has been process) the Http status code should be "410 Gone":

 1. Http request:
    HEAD https://<master>/<environment>/certificate_request/<issued_cert_name>

    Http response:
    410 Gone

> On Fri, Sep 17, 2010 at 10:35 AM, Luke Kanies <[email protected]> wrote:
> 
> > I like Mathias's proposal, and I think all it leaves to solve is signing of
> > certs, right?
> >

This is done by a POST request:

 1. Http request:
      POST https://<master>/<environment>/certificate/

      <cert_name>


    <<< Server side processing: generate the certificate >>>


    Http response:
      201 OK
      Location: https://<master>/<environment>/certificate/<cert_name>

    https://<master>/<environment>/certificate/<cert_name>

A side effect of the POST request would be to mark the csr as processed
(thus being able to return 410 Gone instead of 200 OK).

-- 
Mathias Gug
Ubuntu Developer  http://www.ubuntu.com

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to