attachment

<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body style="overflow-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;"><div>Waking this up again, and bringing it back to the IPP reflector.</div><div><br></div><div>I didn't think about the print server case, where one host is hosting multiple printers. That brings us all the way back to submitting the URI, which provides both the host name and the resource path of the printer.</div><div><br></div><div>I still suspect that, even for the "standard" printer, it is necessary for the Client to supply the Printer's certificate fingerprint so that the Authentication Service can confirm that the Client is interacting with a particular Printer hosted on a system that is using a TLS certificate that has a particular fingerprint. If it doesn't want to use it, it can ignore it. But it should know the current certificate fingerprint, right?</div><br><div>
Smith<br><br><br>

</div>
<div><br><blockquote type="cite"><div>On Dec 7, 2022, at 1:50 AM, Piotr Pawliczek <pawliczek@google.com> wrote:</div><br class="Apple-interchange-newline"><div>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<div>
<font face="" calibri??=""><b><span style="font-size:11.0pt;line-height:107%; color:red">CAUTION: External Email
</span></b></font>
<div>
<div dir="ltr"><br>
<div>Hi Smith,</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><span class="gmail-im" style="color:rgb(80,0,80)">
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div><br class="gmail-Apple-interchange-newline">
The problem with printers is that users do not verify their URLs like they do when browsing the internet. So, the Authorization Server must do it. This is why we have to send to the AS the priner's URL locked by its certificate. </div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
</span>I'm not sure I agree with that entirely but for print server hosted printer URLs, whether on-premises or in the cloud, that is certainly true.</div>
<div><span class="gmail-im" style="color:rgb(80,0,80)"><br>
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div>Another problem is that a client can access multiple printers with different URLs managed by the same AS, which does not fit into "standard" OAuth2/OpenID use cases. With the standard approach, the client should ask the user about each printer separately.</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
</span>I'm not sure that I follow you here. Are you suggesting that if printing was following the more conventional OAuth 2.0 or OIDC use cases, each printer would have its own Authentication Service?</div>
</blockquote>
<div><br>
</div>
<div>In our case a printer is like a resource server in OAuth terminology. In the "standard" OAuth use case the client knows the resource server. In our case it is not true. The client somehow discovers/queries printers from the environment, their URLs are
 not hard coded inside the client. </div>
<div> </div>
<div><br>
</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Agree in general any static value provided by an IPP attribute is unsound - it can be scooped up by anybody and presented as its own.<br>
<br>
Although an X.509 certificate is arguably a "signed static value" it is one that isn't provided by IPP. What makes the certificate fingerprint different is that it is taken from the printer's certificate. And that fingerprint or certificate can be known to
 the Authentication Service via the registration process, so it can be verified or looked up by the Authentication Service.<br>
</blockquote>
<div> </div>
<div>Yes, this is called "certificate pinning". But then you have to refresh the fingerprint saved in the Authentication Service every time you issue a new certificate for a printer. Moreover, several printers may have the same certificate because:</div>
<div>- you have a print server with several IPP printers, they all have the same certificate (their URLs have the same hostname)</div>
<div>- you have a public Printing Service with many infrastructure printers, they all may have the same certificate (their URLs differ only by a path and/or by a query component)  </div>
<div>- you have a wildcard certificate</div>
<div>- you have a multi-domain certificate </div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>And from your other reply:</div>
<span class="gmail-im" style="color:rgb(80,0,80)">
<div><br>
</div>
<div>
<blockquote type="cite">
<div dir="ltr">
<div>What about defining two types of printers?</div>
<div><br>
</div>
<div>A. "standard" printer</div>
<div> - the client must validate its certificate</div>
<div> - the client sends to the AS URL of the printer (without any addition like a fingerprint of the certificate)</div>
<div> - the AS must verify the printer's URL</div>
<div><br>
</div>
<div>B. "certificate-based" printer</div>
<div> - the client DOES NOT validate the printer's certificate (but uses it)</div>
<div> - the client sends to the AS URL of the printer AND the fingerprint of the printer's certificate</div>
<div> - the AS must verify both the printer's URL AND the fingerprint of the printer's certificate</div>
<div><br>
</div>
<div>It would make implementations of the client, the AS, and the printer slightly more complicated, but maybe it is worth it.</div>
<div>Both the client and the AS must be aware about the type of the printer.</div>
</div>
<br>
</blockquote>
</div>
<div><br>
</div>
</span>
<div>I think we could mandate "certificate-based" for everything and then there aren't two variants.</div>
</blockquote>
<div><br>
</div>
<div>The "standard" printer is a must for public services and corporate networks with print servers. Certificate pinning was empirically proved unsecure for the long run (see the link from my previous email). </div>
<div>The "certificate-based" printer is a kind of workaround when:<br>
</div>
<div>- the printer does not have FQDN</div>
<div>- the certificate on the printer cannot be replaced and is invalid (out of date or self-signed)</div>
<div>- you set up an artificial environment for testing/development purposes</div>
<div><br>
</div>
<div> </div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div><br>
</div>
<div>Again, why should the Client submit both the URI and the fingerprint?</div>
</blockquote>
<div>See my note above about several printers having the same certificate.</div>
<div> </div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Dec 6, 2022 at 8:28 PM Kennedy, Smith (Wireless & IPP Standards) <<a href="mailto:smith.kennedy@hp.com">smith.kennedy@hp.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>Hi Piotr,
<div><br>
</div>
<div>
<div>
<blockquote type="cite">
<div>On Dec 6, 2022, at 1:05 PM, Piotr Pawliczek <<a href="mailto:pawliczek@google.com" target="_blank">pawliczek@google.com</a>> wrote:</div>
<br>
<div>
<div><font face=""><b><span style="font-size:11pt;line-height:107%;color:red">CAUTION: External Email
</span></b></font>
<div>
<div dir="ltr">Hi Smith,
<div><br>
</div>
<div>I divided your message into 3 parts and responded to them separately.<br>
</div>
<div><br>
</div>
<div>1.</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
I understand that when the Printer is reachable at a hostname resolvable via infrastructure DNS, and the Printer holds a TLS certificate issued by a trusted CA, the Client can establish trust in the Printer's identity similarly to the trust a web browser can
 establish with a website, such as <a href="http://www.pwg.org/" target="_blank">www.pwg.org</a>. The Authentication Service and the Printer can establish mutual trust using much the same method (possibly via mutual TLS authentication).<br>
</blockquote>
<div><br>
</div>
<div>Actually, the user must trust <a href="http://www.pwg.org/" target="_blank">
www.pwg.org</a>. The certificate only guarantees that the browser is really connecting to
<a href="http://www.pwg.org/" target="_blank">www.pwg.org</a> (and that the connection is encrypted). The certificate says nothing about
<a href="http://www.pwg.org/" target="_blank">www.pwg.org</a>. Everyone can get a signed certificate, the only requirement is to prove that you control the given domain (they usually ask to publish a given file on the claimed domain).</div>
<div>Again, the trust is between the user and the hostname part of the given URL. TLS is only the tool to verify the identity of the domain and make the connection secure.</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
Agree. ðŸ˜Š </div>
<div><br>
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div>The problem with printers is that users do not verify their URLs like they do when browsing the internet. So, the Authorization Server must do it. This is why we have to send to the AS the priner's URL locked by its certificate. </div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
I'm not sure I agree with that entirely but for print server hosted printer URLs, whether on-premises or in the cloud, that is certainly true.</div>
<div><br>
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div>Another problem is that a client can access multiple printers with different URLs managed by the same AS, which does not fit into "standard" OAuth2/OpenID use cases. With the standard approach, the client should ask the user about each printer separately.</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
I'm not sure that I follow you here. Are you suggesting that if printing was following the more conventional OAuth 2.0 or OIDC use cases, each printer would have its own Authentication Service?</div>
<div><br>
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div><br>
</div>
<div><br>
</div>
<div>2.</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>That doesn't work for the "local printer" case, as we have already discussed. A Client may depend on a TOFU / certificate pinning model to establish some level of trust in the Printer in this scenario, since ".local." domain hostnames aren't registered
 in the global DNS. That works reasonably well for purely local printing where the trust expectations are arguably lower. The owner / operator may implement DNS and provision the printer with a certificate issued by a trusted CA, but then it is supported by
 infrastructure DNS and so falls under the model previously described. </div>
</blockquote>
<div><br>
</div>
<div> Actually, pinning certificates is a very strong technique from the "mathematical" point of view, and works also with self-signed certificates. But, it is generally discouraged in the public network (see the full story:
<a href="https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning" target="_blank">
https://www.digicert.com/blog/certificate-pinning-what-is-certificate-pinning</a>). On the other hand, it may be quite useful in small local</div>
<div> networks or with mDNS hostnames.</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
Yep, and already widely used as you describe. ðŸ˜Š </div>
<div><br>
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div>This is why I want the client to forward a fingerprint of the printer's certificate to AS.</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>I  re-read your slides from the May F2F and I found you taking this position on slides 14 and 17. Sorry for being slow - I like this idea. </div>
<div><br>
</div>
<div>There is no reason why this couldn't be used for both "local" printers and printers with a routable FQDN. But you don't describe how the printer's certificate fingerprint will be conveyed along with the printer URI on slide 17. Can you expand on that a
 bit? And why is the fingerprint alone not sufficient?</div>
<div><br>
</div>
<blockquote type="cite">
<div>
<div>
<div>
<div dir="ltr">
<div></div>
<div>3.</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
Either of these are methods for establishing trust between two directly communicating peers (Client and Authentication Service, Client and Printer, Authentication Service and Printer). But what we are trying to figure out with the resource identifier is a value
 that the Client uses to identify the Printer to the Authentication Service in an unimpeachable way. It should be a value that can be clearly validated by the Authentication Service and it should not be spoof-able in the same way that a DNS hostname can be
 spoofed or a UUID can be spoofed. Moreover, it should be a value that could only be provided by the printer if it had been registered with the Authentication Service. This could be a signed static value (some in HP have suggested a JWS?) or it could be a temporary
 / dynamic value that the Printer would request from the Authentication Service similar to how a Device Authorization Grant works.<br>
</blockquote>
<div> </div>
<div>Consider the following scenario: I connect to a printer and ask for this token(="a signed static value"). Then, I can pretend to be the printer to other users (I have the token, right?), and even better, forward print jobs they are sending to me to the
 real printer. This is a classic example of man-in-the-middle.</div>
</div>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>
<div>Agree in general any static value provided by an IPP attribute is unsound - it can be scooped up by anybody and presented as its own.</div>
<div><br>
</div>
</div>
</div>
</div>
<div>Although an X.509 certificate is arguably a "signed static value" it is one that isn't provided by IPP. What makes the certificate fingerprint different is that it is taken from the printer's certificate. And that fingerprint or certificate can be known
 to the Authentication Service via the registration process, so it can be verified or looked up by the Authentication Service.</div>
<div><br>
</div>
<div><br>
</div>
<div>And from your other reply:</div>
<div><br>
</div>
<div>
<blockquote type="cite">
<div dir="ltr">
<div>What about defining two types of printers?</div>
<div><br>
</div>
<div>A. "standard" printer</div>
<div> - the client must validate its certificate</div>
<div> - the client sends to the AS URL of the printer (without any addition like a fingerprint of the certificate)</div>
<div> - the AS must verify the printer's URL</div>
<div><br>
</div>
<div>B. "certificate-based" printer</div>
<div> - the client DOES NOT validate the printer's certificate (but uses it)</div>
<div> - the client sends to the AS URL of the printer AND the fingerprint of the printer's certificate</div>
<div> - the AS must verify both the printer's URL AND the fingerprint of the printer's certificate</div>
<div><br>
</div>
<div>It would make implementations of the client, the AS, and the printer slightly more complicated, but maybe it is worth it.</div>
<div>Both the client and the AS must be aware about the type of the printer.</div>
</div>
<br>
</blockquote>
</div>
<div><br>
</div>
<div>I think we could mandate "certificate-based" for everything and then there aren't two variants.</div>
<div><br>
</div>
<div>Again, why should the Client submit both the URI and the fingerprint?</div>
<div><br>
</div>
</div>
</blockquote>
</div>
</div>
</div>

</div></blockquote></div><br></body></html>