14:47, EET
March 16, 2017
Hi all,
I’ve a question on the process of how to provide the user certifcate for authenication.
Currently I see 3 options….
Option 1) The client creates the user certificate and someone (who agrees that a client using this certificate is allowed to connect) copies the certifacte to the Server.
Option 2) Someone creates the user certificate on the server and provides the certifcate to the client application e.g. by copying/mailing it to the client application owner.
Option 3) The client creates the user certificate and tries to connect to the server. The server initially rejects it and places it in a reject folder. Someone on server side copies it to an accept folder (either by server UI or by the file system) – afterwards the client is possible to connect to the server.
So the main question for me is: Is there any best procedure on how to deal with the user certificates?
Thanks!
17:22, EET
April 3, 2012
Hi,
Please clarify do you mean by “user certifcate for authenication” 1. the connection certificates (Application Instance Certificates) or 2. user authorization certificates (that is one of the ways in ActivateSession, i.e. what would be set by UaClient.setUserIdentity)?
General:
Anyway, is is pretty much the same regradless of which one it was (or both). Currently in practice it is option 1 and/or 3. The problem with Option 2 would be that it would make someone else know your private key (the server would know the Client’s key and could fake being the Client Application), something of which should never happen. There might be a special scenario regrading GDS where that might be the only way, but normally that should not happen (and even there it would be the same entity controlling both client and server side per se).
GDS related:
In the future (or well in theory even now, though we do not have any specific support for it) you can also have a so called Global Discover Server (GDS). GDS sort of higher-level discovery server than a Local Discovery Server (LDS). You might e.g. have a GDS per a factory floor or something like that.
GDS can also handle the certificate provisioning and push them to an OPC UA Application (that has been coded to support a GDS). An application could also pull them instead. Thus the GDS would be a centralized place to manage certificates in case you have e.g. 1000 OPC UA Client/Servers on a factory floor. It would also maintain the trust lists etc. thus you would no longer move the certs in an individual application’s disk/configurations but instead configure them in the GDS.
There is both https://reference.opcfoundation.org/v104/GDS/docs/7.6.3/ StartSigningRequest + https://reference.opcfoundation.org/v104/GDS/docs/7.6.4/ StartNewKeyPairRequest. In StartSigningRequest I think (would have to check more closely once relevant though) the UA Application only knows the private key. In StartNewKeyPairRequest both the GDS + Application would know the private key. But the latter would only be used if a device is completely incapable of doing even the signing request (maybe some very tiny embedded device). Though in that case I think the owner of both client and server sides is the same entity so it probably wont matter that much. Though I would personally argue that if a device would be capable of validating certs I think it should also be able to create the signing request (though a source of a “secure random” source might be of an issue, though a µController might be able to use e.g. a floating input not connected to obtain some randomness, but based on some 1-minute googling apparently that is not a good source of entropy, e.g. a first result I got: https://www.pentestpartners.com/security-blog/want-entropy-dont-use-a-floating-adc-input/ so maybe for those cases it is a no-can-do scenario and GDS would have to provide it fully).
11:10, EET
March 16, 2017
Hi Bjarne,
thank you for your detailed answer.
Just for clarification…
>Please clarify do you mean by “user certifcate for authenication” 1. the connection certificates (Application Instance Certificates)
>or 2. user authorization certificates (that is one of the ways in ActivateSession, i.e. what would be set by UaClient.setUserIdentity)?
I meant user authorization certificates.
Your answer regarding my options (1,2,3) on how to provide the user certificate make sense. Only with option 1 or 3 the client (user) is the only one who knows the private key. So option 2 is possible and I’ve seen this already in production environments but it is discouraged because the user certificates private key is ‘out of control’.
Most Users Ever Online: 1919
Currently Online:
17 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Heikki Tahvanainen: 402
hbrackel: 144
rocket science: 88
pramanj: 86
Francesco Zambon: 83
Ibrahim: 78
Sabari: 62
kapsl: 57
gjevremovic: 49
Xavier: 43
Member Stats:
Guest Posters: 0
Members: 730
Moderators: 7
Admins: 1
Forum Stats:
Groups: 3
Forums: 15
Topics: 1529
Posts: 6471
Newest Members:
rickykennion, PromotionToold, HypromeImpupe, toneylapham544, rondawolinski7, Marypof5711, roycedelargie91, kourtneyquisenbe, ellis87832073466, zkxwilliemaeModerators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1032, Jimmy Ni: 26, Matti Siponen: 349, Lusetti: 0
Administrators: admin: 1