@Nathan Thanks a lot for the detailed explanation. One final gap that I
still have is the following: what would be then the common attribute among
the different client certificates. I assume that each will have its own
private key not all clients need to have the same certificate private key.
Another question is about the roles: how can you associate a role with a
client certificate and then be able to fine tune the ACL based on roletypes.

@Max: I think the model here is different from the public web where
browsers verify the certificates of the server. In most cases in the web,
this is just used for establishing a secure TLS connection for https not
for further access control on the server resources.

Best regards,

Khaled


On Thu, Nov 29, 2018 at 8:41 AM Max Kholmyansky <max...@gmail.com> wrote:

> Hi Nathan
>
> Thanks for educating us.
>
> One point to clarify: when you say *"the reason the Client trusts the
> Server"  - *you actually meant that the *server *is making a decision *to
> trust the client*, based on the technical explanation you provided?
>
> I understand that technically, same private key and sam certificate may be
> reused between multiple clients connecting to the server, and all what the
> server cares - is that each client can present the certificate and proof
> the private key possession.
>
> Also, can you please clarify of TLS can work "in the reverse way", i.e.
> requiring the server to present its certificate, and the client to verify
> its validity. This is "inspired" by what I know about the public Internet
> services: each organization running a secure web site has to obtain a
> certificate, and web browsers (in client role) validate the certificates
> presented by the server they connect to, but there is no requirement for a
> browser (client) to carry any certificate. Can you please explain whether
> this way is supported by IoTivity, and what are the considerations.
>
> Nathan, thanks again for your valuable feedback, and best regards.
>
> Max.
>
>
>
>
> On Wed, Nov 28, 2018 at 6:07 PM Heldt-Sheller, Nathan <
> nathan.heldt-shel...@intel.com> wrote:
>
>> Thanks Khaled, Max,
>>
>>
>>
>> Khaled is correct: the way to avoid needing a /cred entry for each Client
>> is to use asymmetric crypto (Certs in the IoTivity case).
>>
>>
>> A thorough explanation of asymmetric crypto is a bit much for an email
>> but I think this Q&A is pretty decent:
>> https://crypto.stackexchange.com/questions/32304/how-exactly-does-certificate-based-authentication-work.
>> There’s a lot more on the web if you search for “certificate based
>> handshake”.
>>
>>
>>
>> The (very) simplified version is that the Client presents a public
>> Identity certificate (also called End Entity Certificate) to the Server.
>> That EE Certificate contains a public key which corresponds to the private
>> key held by the Client, so that the Client can prove that it is the
>> rightful owner of the EE Cert, via asymmetric crypto operations.
>>
>>
>>
>> The Client’s EE Certificate is also signed by an entity called a
>> “Certificate Authority” or “CA”.  The Server has a pre-installed
>> certificate called a “Root Certificate”.  This is what allows the Server to
>> verify EE Certs issued by that CA.  Using the public key in the Root
>> Certificate, the Client can verify the veracity of the EE Cert.
>>
>>
>>
>> So in the end, the reason the Client trusts the Server is that a) the
>> Client’s EE cert can be verified to have been issued by the CA, to the
>> owner of the corresponding private keys, and b) the Client can demonstrate
>> that it is the owner of those private keys.
>>
>>
>>
>> This doesn’t require a /cred entry for each Client, because the same Root
>> Certificate can be used to verify the veracity of many different Client
>> certificates.  But the Server does need to have a the Root Cert installed
>> for the CA(s) that issued the Client cert.   We call that Root Cert the
>> “Trust Anchor” because it is the last point in the dotted line of items
>> that form a logical chain of trustworthiness.
>>
>>
>> Hope that helps,
>>
>> Thanks,
>> Nathan
>>
>>
>>
>> *From:* iotivity-dev@lists.iotivity.org [mailto:
>> iotivity-dev@lists.iotivity.org] *On Behalf Of *Khaled Elsayed
>> *Sent:* Wednesday, November 28, 2018 6:10 AM
>> *To:* khaledieee <khaledi...@gmail.com>
>> *Cc:* max...@gmail.com; iotivity-dev <iotivity-dev@lists.iotivity.org>
>> *Subject:* Re: [dev] Server to communicate via DTLS session with any
>> client?
>>
>>
>>
>> Also, if you can clearly identify what is happening, please share your
>> findings. I had a look but still not totally clear about the exact
>> procedure.
>>
>>
>>
>>
>>
>>
>>
>> On Wed, Nov 28, 2018 at 4:07 PM Khaled Elsayed via Lists.Iotivity.Org
>> <khaledieee=gmail....@lists.iotivity.org> wrote:
>>
>> This can be done via certificates. You can find the example for the
>> provisionclient. I am still trying to figure out myself as it is not very
>> well documented. Quoting Nathan reply on my question sent last week or so.
>>
>> There is indeed an example of Certificate-based Client/Server
>> authentication in the IoTivity example “sampleserver_mfg”, which is in the
>> resource/csdk/securitiy/provisioning/sample folder.
>>
>>
>>
>> On Wed, Nov 28, 2018 at 2:56 PM Max <max...@gmail.com> wrote:
>>
>>
>>
>> Hi,
>>
>>
>>
>> I am looking for a technical advice on how a *secure UDP endpoint *("coaps")
>> exposed by IoTivity-powered server - may be accessed *from any
>> IoTivity-powered client*, without prior coordination between the client
>> and the server.
>>
>>
>>
>> This is similar to the idea that any browser in the world can access a
>> web site via SSL, while the server isn't blocking any particular browser
>> from the access.
>>
>>
>>
>> *[Note: this is a technology POC, not related to the OCF specification.
>> So the question is in the context of IoTivity library capabilities, not in
>> the context of the OCF security and compliance]*
>>
>>
>>
>> I would appreciate some advice from the people who understand how the
>> DTLS "handshake" in IoTivity works.
>>
>>
>>
>> Looking at the sample code... The "simpleclient" and "simpleserver"
>> sample solve the issue, via placing a shared "credential" into the security
>> configuration file.
>>
>>
>>
>> Below is the server configuration file.
>>
>>
>>
>> However, this isn't good for me, since the server needs a section per
>> specific "di" of the connecting client, while my goal is to allow DTLS
>> (secure) session for any client.
>>
>>
>>
>> I would appreciate ideas on how it can be done.
>>
>>
>>
>> Thanks in advance,
>>
>>
>>
>> Max.
>>
>>
>>
>> "cred": {
>>
>>         "creds": [
>>
>>             {
>>
>>                 "credid": 1,
>>
>>                 "subjectuuid": "32323232-3232-3232-3232-323232323232",
>>
>>                 "credtype": 1,
>>
>>                 "period": "20150630T060000/20990920T220000",
>>
>>                 "privatedata": {
>>
>>                     "data": "AAAAAAAAAAAAAAAA",
>>
>>                     "encoding": "oic.sec.encoding.raw"
>>
>>                 }
>>
>>             },
>>
>>             {
>>
>>                 "credid": 2,
>>
>>                 "subjectuuid": "31393139-3139-3139-3139-313931393139",
>>
>>                 "credtype": 1,
>>
>>                 "period": "20150630T060000/20990920T220000",
>>
>>                 "privatedata": {
>>
>>                     "data": "BBBBBBBBBBBBBBBB",
>>
>>                     "encoding": "oic.sec.encoding.raw"
>>
>>                 }
>>
>>             }
>>
>>         ],
>>
>>         "rowneruuid": "32323232-3232-3232-3232-323232323232"
>>
>>     }
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> 
>>
>

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#10039): 
https://lists.iotivity.org/g/iotivity-dev/message/10039
Mute This Topic: https://lists.iotivity.org/mt/28430313/21656
Group Owner: iotivity-dev+ow...@lists.iotivity.org
Unsubscribe: https://lists.iotivity.org/g/iotivity-dev/unsub  
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to