

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Recupere los atributos con la biblioteca PKCS \#11 para AWS CloudHSM SDK 5 de cliente
<a name="pkcs11-attributes-retrieve"></a>

Cuando la aplicación lee los atributos de una clave o un objeto de certificado, la biblioteca PKCS \#11 envía una solicitud al clúster por cada `C_GetAttributeValue` llamada. La cantidad de atributos de la plantilla no cambia la cantidad de solicitudes. Una llamada que solicita diez atributos envía una solicitud. Diez llamadas en las que cada una solicita un atributo envían diez solicitudes.

Cada llamada lee los atributos del objeto de tu clúster en una solicitud y, a continuación, copia los valores que solicita tu plantilla. La biblioteca PKCS \#11 no almacena en caché los valores, por lo que cada llamada envía una nueva solicitud.

Para reducir la cantidad de solicitudes que envía la aplicación, sigue estas recomendaciones:
+ Solicita todos los atributos que necesites en una plantilla. Cree una plantilla única que contenga todos los atributos que desee y pásela a una sola `C_GetAttributeValue` llamada. En el siguiente ejemplo, se leen tres atributos de una clave en una llamada.

  ```
  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));
  ```

  Para obtener más información, consulte [ Listar los atributos clave ](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/) en el GitHub sitio web.
+ Solicita solo los atributos que admite tu objeto y que puedes leer. Cuando la plantilla asigna un nombre a un atributo que el objeto no tiene, `C_GetAttributeValue` se establece como `ulValueLen` `CK_UNAVAILABLE_INFORMATION` para ese atributo y lo devuelve`CKR_ATTRIBUTE_TYPE_INVALID`. Un atributo sensible se comporta de la misma manera y devuelve`CKR_ATTRIBUTE_SENSITIVE`. En ambos casos, los demás atributos de la plantilla seguirán recibiendo sus valores. Comprueba `ulValueLen` cada atributo en lugar de solo el valor devuelto por la llamada. Para conocer los atributos que admite cada tipo de objeto y los atributos que son confidenciales, consulte[Tablas de atributos de la biblioteca PKCS \#11 para AWS CloudHSM SDK 5 de cliente](pkcs11-attributes-interpreting.md).
+ Comprueba cuántas llamadas realiza tu enlace de idioma. Un enlace PKCS \#11 para un lenguaje como Python o Java decide cuántas `C_GetAttributeValue` llamadas envía. Algunos enlaces envían una llamada para cada atributo y otros envían dos. Usa la interfaz que proporciona tu enlace para leer varios atributos a la vez y medir las llamadas que envía tu aplicación.
+ Guarda en caché los valores de los atributos de tu aplicación. Lee los atributos de un objeto una sola vez y almacena los valores que necesita tu aplicación. Puedes reutilizar un valor almacenado en caché hasta que algo cambie el objeto. Cuando otras aplicaciones o usuarios puedan modificar tus objetos, actualiza la caché cuando lo hagan.
+ Asigne sus búferes antes de leer un atributo. El estándar PKCS \#11 describe un patrón de dos pasos para valores de longitud variable. La aplicación llama `C_GetAttributeValue` con `pValue` set to `NULL_PTR` para conocer la longitud y, a continuación, vuelve a llamarla para leer el valor. Ambas llamadas envían una solicitud. Cuando conozca el tamaño de un búfer que contiene los valores esperados, asigne primero los búferes y lea los valores con una sola llamada.

  Un búfer demasiado pequeño devuelve `CKR_BUFFER_TOO_SMALL` ese atributo y la llamada sigue enviando una solicitud. Elija tamaños de búfer que sean lo suficientemente generosos para los valores esperados. Los atributos que contienen una plantilla, como`CKA_WRAP_TEMPLATE`, siguen necesitando el patrón de dos pasadas.

**nota**  
Estas recomendaciones se aplican tanto a los objetos clave como a los objetos de certificado, y se aplican diferentes límites a cada uno de ellos. El almacenamiento de certificados tiene un límite de velocidad de lectura fijo y cada `C_GetAttributeValue` llamada a un objeto de certificado utiliza una operación de lectura del mismo. En el caso de los objetos clave, el atributo de aceleración del HSM se lee cuando alcanzan su capacidad máxima, en lugar de hacerlo a una velocidad fija. La biblioteca PKCS \#11 reintenta esas solicitudes automáticamente. Enviar menos solicitudes ayuda a que la aplicación se mantenga dentro de ambos límites. Para obtener más información, consulte [Límites de almacenamiento de certificados](pkcs11-certificate-storage-limits.md) y [Limitación de HSM](troubleshoot-hsm-throttling.md).