Ci sono principalmente due modi principali, uno dei quali con estensioni di certificato e uno dei quali è una cattiva idea. Questi due sono gli stessi ...
In un certificato , puoi codificare "usi" come parte del Extended Key Usage
estensione. Nella tua terminologia, definiresti alcuni OID per le azioni A, B, C e D e inserirai solo OID per A e C nel certificato.
Ciò che non va bene è che tu stai confondendo autenticazione e autorizzazione in un certificato e che i certificati non sono validi all'autorizzazione. Per essere chiari:
-
Autenticazione riguarda l'accertamento di chi sta chiamando. Ecco a cosa servono i certificati: legano una identità a una chiave pubblica e il protocollo di trasporto (es. SSL) assicura che il chiamante controlli la chiave privata corrispondente a quella pubblica chiave.
-
L'autorizzazione riguarda la decisione su cosa consentire a un determinato individuo di fare. Normalmente avviene l'autenticazione dopo .
I certificati non sono validi per le attività di autorizzazione, per una serie di motivi, in particolare perché l'unico meccanismo che può "annullare" un certificato è revoca , che è asincrono (può richiedere diverse ore o anche giorni per una revoca da propagare tramite CRL) e tutto-o-niente (non è possibile revocare parzialmente un certificato). Nella tua situazione, ciò significherebbe che se vuoi bloccare un'applicazione specifica, il blocco richiederà ore per essere efficace; e non è possibile rimuovere il diritto di eseguire l'azione C senza rimuovere il diritto di eseguire l'azione A. Allo stesso modo, se si desidera concedere un nuovo diritto di accesso a un client, è necessario emettere un nuovo certificato e inviarlo al client; se il client memorizza i suoi certificati su un dispositivo (ad esempio una smart card), ciò può aumentare i problemi di usabilità (un PC di base può usare smart card fuori dalla scatola, ma scrivere nella smart card richiede un software specifico).
Per questi motivi, dovresti davvero usare i certificati solo per l'autenticazione. In un contesto client / server, il certificato viene utilizzato dal client per dimostrare la propria identità al server, ma l'autorizzazione è una decisione puramente lato server. Non è necessario che i dati di autorizzazione si verifichino mai sul lato client.
In un mondo di Microsoft / Active Directory, l'autorizzazione sarebbe incorporata da ACL e appartenenze ai gruppi sui server AD. I certificati vengono utilizzati per associare il richiedente a un account, ma i diritti concessi a tale account vengono mantenuti nel server AD, non nel certificato.