¿Cómo generamos un hash SHA256 codificado en base64 de SubjectPublicKeyInfo de un certificado X.509, para la fijación del certificado de Android N?

La documentación de la N Developer Preview para su configuración de seguridad de red ofrece estas instrucciones:

La fijación de certificados se realiza proporcionando un conjunto de certificados por hash de la clave pública (SubjectPublicKeyInfo del certificado X.509). Una cadena de certificados sólo es válida si la cadena de certificados contiene al menos una de las claves públicas fijadas.

El XML que muestran está roto (falta una etiqueta de cierre), pero por lo demás sugiere que el hash es SHA256 y codificado base64:

<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config> <domain includeSubdomains="true">example.com</domain> <pin-set expiration="2018-01-01"> <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin> <!-- backup pin --> <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin> </domain-config> </network-security-config> 

¿Cómo creamos tal hash?

He intentado el enfoque en esta esencia , pero openssl x509 -inform der -pubkey -noout no está gustando mi archivo CRT. No puedo determinar fácilmente si el problema está en el archivo CRT, las instrucciones, mi versión de openssl o algo más.

¿Alguien tiene una buena receta conocida para crear este hash?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.