Avatar

Please consider registering
guest

sp_LogInOut Log In sp_Registration Register

Register | Lost password?
Advanced Search

— Forum Scope —




— Match —





— Forum Options —





Minimum search word length is 3 characters - maximum search word length is 84 characters

sp_Feed Topic RSS sp_TopicIcon
Questions about the process of providing the user certificate
January 27, 2021
14:47, EET
Avatar
rocket science
Member
Members
Forum Posts: 88
Member Since:
March 16, 2017
sp_UserOfflineSmall Offline

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!

January 27, 2021
17:22, EET
Avatar
Bjarne Boström
Moderator
Moderators
Forum Posts: 1032
Member Since:
April 3, 2012
sp_UserOfflineSmall Offline

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).

January 29, 2021
11:10, EET
Avatar
rocket science
Member
Members
Forum Posts: 88
Member Since:
March 16, 2017
sp_UserOfflineSmall Offline

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’.

Forum Timezone: Europe/Helsinki

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, zkxwilliemae

Moderators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1032, Jimmy Ni: 26, Matti Siponen: 349, Lusetti: 0

Administrators: admin: 1