Solución al error AH02577 Init SSLPassPhraseDialog builtin is not supported on Win32 key file .key que se produce en un servidor web Apache, en Windows, cuando activamos el acceso HTTPS y usamos un fichero de clave privada con contraseña.
- Error Init SSLPassPhraseDialog builtin is not supported on Win32 key file.
- Solución al error Init SSLPassPhraseDialog builtin is not supported on Win32 key file.
Error Init SSLPassPhraseDialog builtin is not supported on Win32 key file
Cuando activamos el acceso HTTPS (TLS) a un servidor web con Apache en Windows y hemos usado un fichero de clave privada con palabra de paso (contraseña), obtendremos el siguiente error (consultable en el fichero error.log de Apache):
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Mon Oct 28 21:37:40.271425 2024] [ssl:emerg] [pid 42920:tid 388] AH02577: Init: SSLPassPhraseDialog builtin is not supported on Win32 (key file D:/xampp/apache/conf/ssl.key/certificado.key) [Mon Oct 28 21:37:40.272426 2024] [ssl:emerg] [pid 42920:tid 388] AH02311: Fatal error initialising mod_ssl, exiting. See D:/xampp/apache/logs/error.log for more information [Mon Oct 28 21:37:40.272426 2024] [ssl:emerg] [pid 42920:tid 388] AH02564: Failed to configure encrypted (?) private key www.example.com:443:0, check D:/xampp/apache/conf/ssl.key/certificado.key [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error (Type=PKCS8_PRIV_KEY_INFO) [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error (Type=RSAPrivateKey) [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:04093004:rsa routines:old_rsa_priv_decode:RSA lib [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag [Mon Oct 28 21:37:40.273426 2024] [ssl:emerg] [pid 42920:tid 388] SSL Library Error: error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error (Type=PKCS8_PRIV_KEY_INFO) AH00016: Configuration Failed |
El error es debido a que no se le ha pasado la contraseña de la clave privada del certificado por ningún medio, por ello, al iniciar el servicio, se produce este error.
Solución al error Init SSLPassPhraseDialog builtin is not supported on Win32 key file
Para solucionar el error Init SSLPassPhraseDialog builtin is not supported on Win32 key file, en primer lugar, crearemos un ejecutable (.exe) que muestre por consola la palabra de paso (contraseña). Para ello, podremos usar cualquier lenguaje de programación. En este caso, usaremos Python, el programa será:
1 2 3 4 |
import sys print("la_contraseña_del_fichero_clave_privada") sys.exit(0) |
En el programa anterior, cambiaremos la_contraseña_del_fichero_clave_privada por la contraseña que hayamos introducido al generar el fichero de clave privada (como indicamos en este tutorial).
Guardaremos el código anterior Python en un fichero con el nombre passcert.py y generaremos el ejecutable, con el comando:
1 |
pyinstaller.exe .\passcert.py -F |
El comando anterior habrá generado el fichero ejecutable passcert.exe. Copiaremos este fichero:
Y lo pegaremos en alguna carpeta del servidor de Apache, por ejemplo en «conf»:
Hay que tener precaución con este fichero ejecutable, dado que devuelve en consola la contraseña de la clave privada. Por ello, lo colocaremos en una carpeta con permisos de acceso limitados.
Editaremos el fichero httpd-ssl.conf de Apache, que suele estar en la carpeta:
…\conf\extra
Comentaremos la línea:
1 |
SSLPassPhraseDialog builtin |
Quedando:
1 |
#SSLPassPhraseDialog builtin |
Y añadiremos la línea:
1 |
SSLPassPhraseDialog exec:C:/xampp/apache/conf/passcert.exe |
Estableciendo la ruta y nombre del fichero ejecutable que genera la contraseña por consola, en este caso:
C:/xampp/apache/conf/passcert.exe
Guardaremos los cambios realizados en el fichero httpd-ssl.conf.
Reiniciaremos el servicio de Apache y este parámetro abrirá la aplicación passcert.exe que envía la contraseña a consola, solucionándose el error Init SSLPassPhraseDialog builtin is not supported on Win32 key file.