

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Recupera gli attributi con la libreria PKCS \#11 per AWS CloudHSM Client SDK 5
<a name="pkcs11-attributes-retrieve"></a>

Quando l'applicazione legge gli attributi da una chiave o da un oggetto certificato, la libreria PKCS \#11 invia una richiesta al cluster per ogni chiamata. `C_GetAttributeValue` Il numero di attributi nel modello non modifica il numero di richieste. Una chiamata che richiede dieci attributi invia una richiesta. Dieci chiamate che richiedono un attributo inviano dieci richieste.

Ogni chiamata legge gli attributi dell'oggetto dal cluster in un'unica richiesta e quindi copia i valori richiesti dal modello. La libreria PKCS \#11 non memorizza i valori nella cache, quindi ogni chiamata invia una nuova richiesta.

Per ridurre il numero di richieste inviate dall'applicazione, segui questi consigli:
+ Richiedi tutti gli attributi di cui hai bisogno in un unico modello. Crea un singolo modello che contenga tutti gli attributi che desideri e passalo a una `C_GetAttributeValue` chiamata. L'esempio seguente legge tre attributi di una chiave con una chiamata.

  ```
  CK_OBJECT_CLASS obj_class;
  CK_BYTE label[128];
  CK_BYTE id[128];
  
  CK_ATTRIBUTE attrs[] = {
          {CKA_CLASS, &obj_class, sizeof(obj_class)},
          {CKA_LABEL, label,       sizeof(label)},
          {CKA_ID,    id,          sizeof(id)},
  };
  
  rv = funcs->C_GetAttributeValue(session, object, attrs,
                                  sizeof(attrs) / sizeof(CK_ATTRIBUTE));
  ```

  Per ulteriori informazioni, vedere [ Elencare gli attributi chiave ](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/) sul GitHub sito Web.
+ Richiedi solo gli attributi supportati dal tuo oggetto e che puoi leggere. Quando il modello nomina un attributo che l'oggetto non ha, `C_GetAttributeValue` imposta un valore `ulValueLen` `CK_UNAVAILABLE_INFORMATION` per quell'attributo e restituisce`CKR_ATTRIBUTE_TYPE_INVALID`. Un attributo sensibile si comporta allo stesso modo e restituisce`CKR_ATTRIBUTE_SENSITIVE`. In entrambi i casi, gli altri attributi del modello ricevono comunque i loro valori. Controlla `ulValueLen` ogni attributo anziché solo il valore restituito dalla chiamata. Per gli attributi supportati da ogni tipo di oggetto e per gli attributi sensibili, consulta[Tabelle degli attributi della libreria PKCS \#11 per AWS CloudHSM Client SDK 5](pkcs11-attributes-interpreting.md).
+ Controlla quante chiamate effettua l'associazione linguistica. Un'associazione PKCS \#11 per un linguaggio come Python o Java decide quante `C_GetAttributeValue` chiamate inviare. Alcuni binding inviano una chiamata per ogni attributo, mentre altri ne inviano due. Utilizzate l'interfaccia fornita dall'associazione per leggere più attributi contemporaneamente e misurate le chiamate inviate dall'applicazione.
+ Memorizza nella cache i valori degli attributi nell'applicazione. Leggi gli attributi di un oggetto una sola volta e memorizza i valori necessari all'applicazione. È possibile riutilizzare un valore memorizzato nella cache finché qualcosa non modifica l'oggetto. Quando altre applicazioni o utenti possono modificare i tuoi oggetti, aggiorna la cache dopo averlo fatto.
+ Allocate i buffer prima di leggere un attributo. Lo standard PKCS \#11 descrive uno schema a due passaggi per valori di lunghezza variabile. L'applicazione chiama `pValue` set `C_GetAttributeValue` to per `NULL_PTR` conoscere la lunghezza, quindi lo chiama nuovamente per leggere il valore. Entrambe le chiamate inviano una richiesta. Quando conosci una dimensione del buffer che contiene i valori che ti aspetti, alloca prima i buffer e leggi i valori con una chiamata.

  Un buffer troppo piccolo restituisce tale attributo e `CKR_BUFFER_TOO_SMALL` la chiamata invia comunque una richiesta. Scegliete dimensioni del buffer sufficientemente generose per i valori previsti. Gli attributi che contengono un modello, ad esempio`CKA_WRAP_TEMPLATE`, necessitano comunque del modello a due passaggi.

**Nota**  
Questi consigli si applicano sia agli oggetti chiave che agli oggetti certificati e a ciascuno di essi si applicano limiti diversi. L'archiviazione dei certificati ha un limite di velocità di lettura fisso e ogni `C_GetAttributeValue` chiamata a un oggetto certificato utilizza un'operazione di lettura da tale oggetto. Per gli oggetti chiave, l'attributo throttle degli HSM viene letto quando raggiungono la capacità anziché a una velocità fissa. La libreria PKCS \#11 riprova queste richieste automaticamente. L'invio di un minor numero di richieste aiuta l'applicazione a rimanere entro entrambi i limiti. Per ulteriori informazioni, consulta [Limiti di archiviazione dei certificati](pkcs11-certificate-storage-limits.md) e [Limitazione HSM](troubleshoot-hsm-throttling.md).