solucion - El certificado SSL no se pudo completar al vincularse al puerto
revisión de certificado ssl (20)
Acabo de tener otro error. Renueve un certificado caducado para nuestro servicio Workfolders desde nuestra CA utilizando la misma clave privada. Entonces siempre recibí el Error 1312. Incluso si la Gestión de certificados muestra que tengo una clave privada.
Solo pude resolver el problema volviendo a emitir un nuevo certificado (sin la opción renovar). Luego funcionó en el primer intento.
Quizás esto ayude a alguien que también probó la opción de renovar.
Creé un WebService usando WCF. Estoy haciendo hosting propio y quiero habilitar HTTPS. Según tengo entendido, para esto, necesito crear un certificado y vincularme al puerto que quiero usar.
Aquí están los pasos que he hecho para manejar esto:
- Creé un certificado en mi máquina local para actuar como la autoridad de certificación raíz
- makecert -n "CN = My Root Certificate Authority" -r -sv RootCATest.pvk RootCATest.cer
- Abrió MMC.exe e importó el archivo .cer guardado en la carpeta "Trusted Root Certificate / Certificates /"
- makecert -sk MyKeyName -iv RootCATest.pvk -n "CN = MyMachineName" -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer
Creado un certificado de servicio temporal de la Autoridad de certificación raíz firmada
- makecert -sk MyKeyName -iv RootCATest.pvk -n "CN = MyMachineName" -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer
Intentó vincular el Certificado al número de Puerto (443 en este caso)
- netsh http add sslcert ipport = 0.0.0.0: 443 certhash = 2c5ba85bcbca412a74fece02878a44b285c63981 appid = {646937c0-1042-4e81-a3b6-47d678d68ba9}
El resultado del paso 4 es el siguiente error:
Error en el certificado SSL, error 1312
Una sesión de inicio de sesión especificada no existe. Puede que ya haya terminado.
¿Alguien tiene una pista de por qué podría estar recibiendo este error?
Compré un certificado Thawte oficial para asegurar un servicio web alojado en sí mismo (aplicación de consola) sobre un puerto específico en nuestro servidor de Internet. Luego recibí el certificado Thawte y lo instalé con mmc en nuestro servidor de Internet (el certificado fue visible en "Autoridades de certificación raíz de confianza" (con el icono de la llave en la imagen, lo que demuestra que el certificado contiene una clave privada que es obligatoria para poder vincularlo a un puerto por cierto).
El siguiente paso fue habilitar el <port>
para https:
netsh http add urlacl url=https://+:<port>/ user=everyone
(lo que no fue problema)
El siguiente paso fue habilitar el puerto () para https:
netsh http add sslcert ipport=0.0.0.0:<port> certhash=<thumbprint to certificate> appid={<guid to application>}
Esto ha fallado con el mensaje de error:
Error al agregar certificado SSL, Error: 1312 Una sesión de inicio de sesión especificada no existe. Puede que ya se haya terminado.
Luego busqué en Internet y probé varias soluciones sugeridas (sin éxito).
La solución para mi caso fue agregar certstorename = Root al comando netsh:
netsh http add sslcert ipport=0.0.0.0:<port *1)> certstorename=Root certhash=<thumbprint to certificate *2)> appid={<guid to application *3)>}
Notas:
Si no se aplica certstorename al comando net netsh, netsh toma el valor predeterminado, ¿cuál es MY (qué objetivos tiene el almacén de certificados? " Personal " donde los certificados autofirmados se almacenan normalmente).
Root se dirige al almacén de certificados: "Autoridades de certificación de raíz de confianza"
* 1): el puerto, quieres usar la conexión
* 2): puede extraer la huella digital del certificado, si abre el certificado (en un sistema de Windows, simplemente haga doble clic en el certificado en el explorador) - seleccione la pestaña "Detalles" y haga clic en "Huella digital". La "huella digital" se muestra y se puede copiar. Copie la huella digital y elimine todos los espacios ...
* 3): como aplicación, puede tomar cualquier ID con el formato {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} ya que el APPID solo es informativo. Con el comando "netsh http show sslcert" puede consultar los certificados encuadernados en toda la máquina y verá información, qué aplicación está vinculada a qué certificado (no es realmente útil en la práctica por cierto) En mi caso, he tomado el (de VS generado) GUID a mi aplicación de servicio web
El argumento certstorename
debe ser el valor de cadena de la enumeración StoreName del espacio de nombres .net framework System.Security.Cryptography.X509Certificates
.
El problema estaba en el paso 4. Estaba usando la Huella digital del certificado de raíz para el valor en certhash. Para resolver esto, tuve que regresar a la MMC y actualizar los Certificados (computadora local) -> Personal -> carpeta de certificados. A continuación, utilice la Huella digital del certificado emitido por "Root Certificate Authority".
En mi caso, al crear el certificado, elegí un nombre diferente al nombre Mi para mi tienda de certificados. El nombre predeterminado es MI. Entonces, si el tuyo es diferente, agrega el nombre del almacén de certificados = Tu nombre de tienda proporcionado al comando.
En mi caso, el problema fue que el archivo CER no tiene una clave privada adjunta.
Adjunté PK utilizando esos comandos de OpenSSL:
openssl x509 -in server.der -inform DER -out server.pem -outform PEM
openssl pkcs12 -export -in server.pem -inkey serverkey.pem -out server.p12
Funciona para archivos CER / DER.
Entonces para agregar (aún) arreglar / situación.
Tenía un código C # que usaba BouncyCastle para crear certificados autofirmados.
<packages>
<package id="BouncyCastle" version="1.8.1" targetFramework="net45" />
Así que mi código creó los certificados Y los colocó en las ubicaciones correctas en el Cert-Store.
Usando las sugerencias aquí, mi instalación de On Premise Service Bus 1.1 estaba fallando ... y eso me llevó hasta aquí.
Terminé ELIMINANDO ambos certificados que mi código BouncyCastle había creado (desde la tienda de certificados) y reimportándolos (con claves privadas) ... y todo funcionó. Importé PRIMERO a la
Certificados (computadora local) / personales / certificados
luego copié pegado (en el mmc) a cualquier otro lugar (tiendas) que los necesitaba.
Mi "antes" y "después" se veía exactamente igual desde mi punto de vista en MMC, PERO solucionó el problema. Imagínate.
Esto puede parecer obvio; sin embargo, creo que puede salvarle a alguien el tiempo de rascarse la cabeza. Había importado un archivo con la extensión .cer en mi carpeta de certificados personales (para la cuenta del equipo personal). Después de un tiempo, me di cuenta de que necesitaba importar el archivo con la extensión * .pfx en su lugar. Corregido eso y voilà! ¡Problema resuelto!
Estuve trabajando en esto durante horas, y básicamente leí lo que dijo @DoomerDGR8 arriba, pero mi solución fue mucho más simple. corrí
C:/Windows/system32> certutil -store TRUSTEDPUBLISHER
Esto enumeró varios certificados que he instalado, luego ejecuté la tienda de reparaciones en el certificado que estaba teniendo problemas para instalar con netsh.
C:/Windows/system32> certutil -repairstore TRUSTEDPUBLISHER 6
El número 6 al final representa el índice de su certificado, que se encuentra en la tienda, espero que esto ayude
Hay varias formas de recibir este error (ver más arriba para otras respuestas).
Otra forma de recibir este error específico es intentar vincular un certificado a un puerto cuando el certificado no se encuentra en la tienda adecuada.
Verifique que el certificado esté almacenado en la tienda LocalMachine Root (puede usar certutil o certmgr.exe desde la línea de comando para volcarlo correctamente).
gramática actualizada :)
He estado lidiando con este problema y estoy usando un servicio WCF autohospedado. Acabo de hacer el gran avance:
Tenía un certificado en la carpeta de personal para la tienda de máquinas. Caducó y mi gerente emitió uno nuevo. El nuevo falló para mí con este error. Intenté muchas cosas de Google, pero al final resolví el problema con una solución completamente diferente.
Instalé ambos certificados, el vencido y el más nuevo. Luego usé este comando para obtener una lista de ellos:
certutil -store My
Obtengo esta salida (la información es falsa y otros certificados no están en la lista):
================ Certificate 1 ================
Serial Number: 6d
Issuer: [email protected], CN=VoiceTrust Server CA, OU=VoiceTrust Oper
ations, O=VoiceTrust
NotBefore: 03-Jan-2013 3:33 PM
NotAfter: 03-Mar-2013 3:33 PM
Subject: [email protected], CN=hornet.voicetrust.com, OU=Software Develop
ment, O=VoiceTrust eServices MENA FZ LLC, L=Dubai, C=AE
Non-root Certificate
Cert Hash(sha1): 98 5f a0 d3 11 6a 4b 64 3b db 0a a4 11 66 fc 08 28 74 7e 53
Key Container = {E5BC0912-7808-4B89-B457-31946DE5990E}
Unique container name: dfedfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b6
4-30f0d6589239
Provider = Microsoft Enhanced Cryptographic Provider v1.0
Private key is NOT exportable
Encryption test passed
================ Certificate 2 ================
Serial Number: 6d
Issuer: [email protected], CN=VoiceTrust Server CA, OU=VoiceTrust Oper
ations, O=VoiceTrust
NotBefore: 03-Nov-2013 3:33 PM
NotAfter: 03-Dec-2013 3:33 PM
Subject: [email protected], CN=hornet.voicetrust.com, OU=Software Develop
ment, O=VoiceTrust eServices MENA FZ LLC, L=Dubai, C=AE
Non-root Certificate
Cert Hash(sha1): 30 5f a0 d3 11 6a 4b 64 3b db 0a a4 11 66 fc 08 28 74 7e 53
Key Container = {E5BC0912-7808-4B89-B457-31946DE5960E}
*Unique container name:* 55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b6
4-30f0d6589239
Provider = Microsoft Enhanced Cryptographic Provider v1.0
Private key is NOT exportable
Encryption test passed
Ahora, todo parece correcto, pero el certificado 1 ha expirado y funciona si intento vincularlo a un puerto, mientras que el certificado 2 falla con el error 1312.
La diferencia clave que me desconcertaba era la propiedad del nombre único del contenedor . Debería representar un archivo de clave física en el disco duro en %ProgramData%/Microsoft/Crypto/RSA/MachineKeys/
Para el Certificado 1, el archivo estaba allí, pero para el Certificado 2, no había dicho archivo. Después de buscar, encontré el archivo en el certificado 2 en la subcarpeta de la carpeta %AppData%/Microsoft/Crypto/
. Son las teclas específicas del usuario, no las teclas del nivel de la máquina. Es sorprendente que el certificado se esté importando a la tienda de informática, pero siempre conserva la clave de contenedor de la tienda del usuario.
Eliminé el archivo ''55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b64-30f0d6589239'' en la carpeta AppData y ejecuté el comando de reparación para mi certificado 2 en la tienda:
certutil -repairstore My 2
Esta vez, el nombre del contenedor Único reflejaba un archivo en la carpeta adecuada en ''% ProgramData% / Microsoft / Crypto /' y todo comenzó a funcionar.
Espero que esto sea útil para alguien.
He estado luchando contra el error 1312 todo el día, lo que me solucionó fue importar el certificado en mmc como un archivo .p12 en lugar de .crt. Si lo está creando con OpenSSL, una vez que haya creado el .crt, haga lo siguiente:
pkcs12 -export -in server.crt -inkey server.key -name “Your Name” -out server.p12
Como se describe . Cuando vaya a importarlo en mmc, se llamará un archivo de "Intercambio de información personal" (y aparentemente un archivo .pfx también funcionaría).
Soy nuevo en la escritura de servidores y manejo de SSL y no tengo idea de por qué funciona, pero espero que ayude.
Si alguien más se encuentra con este problema y las respuestas aquí no lo responden claramente, el problema central subyacente es que se debe importar la clave privada. Si no marca el certificado como exportable cuando lo importa, la clave privada no se importa y no puede enlazarla. Si lo elimina, lo vuelve a importar y lo marca como exportable, entonces funcionará.
También necesita ser la tienda local de máquinas, como otros han señalado.
Si:
- usted no tenía IIS en su máquina (trabajando con WCF alojado por cuenta propia, digamos), y
- Hizo su solicitud de certificado en otra máquina usando el Administrador de IIS (porque no entendió que la clave privada proviene de cifrados incrustados en la solicitud de certificado, y más tarde se emitió
.pb7
)
entonces:
- simplemente vaya a instalar
.pb7
en la máquina IIS que usó para hacer la solicitud de certificado (máquina local / personal / certificados - usando mmc); - exportar el certificado de esa máquina, incluida su clave privada (asignar contraseña); y
- instálelo usando mmc en el servidor WCF (máquina local / personal / certificados - usando mmc).
Entonces, netsh
te permitirá unir al puerto 443. No más de 1312 errores.
Solo para lanzar otra respuesta al ring, este es el problema que tuve:
Aunque importé mi certificado en el almacén de certificados (Local Computer)/...
, lo importé en la sección Trusted Root Certification Authorities
. Necesitaba importarlo en la sección Personal
; de lo contrario, se produjo este error.
Tuve el mismo error al crear un certificado autofirmado con OpenSSL (BouncyCastle) Lo resolví con la ayuda de esta publicación: No puedo exportar el certificado generado con clave privada a la matriz de bytes en .net 4.0 / 4.5
Tuve que agregar:
RsaPrivateKeyStructure rsa = RsaPrivateKeyStructure.GetInstance(seq); //new RsaPrivateKeyStructure(seq);
RsaPrivateCrtKeyParameters rsaparams = new RsaPrivateCrtKeyParameters(
rsa.Modulus, rsa.PublicExponent, rsa.PrivateExponent, rsa.Prime1, rsa.Prime2, rsa.Exponent1, rsa.Exponent2, rsa.Coefficient);
var rsaPriv = DotNetUtilities.ToRSA(rsaparams);
var cspParams = new CspParameters
{
KeyContainerName = Guid.NewGuid().ToString(),
KeyNumber = (int)KeyNumber.Exchange,
Flags = CspProviderFlags.UseMachineKeyStore
};
var rsaPrivate = new RSACryptoServiceProvider(cspParams);**
// Import private key from BouncyCastle''s rsa
rsaPrivate.ImportParameters(rsaPriv.ExportParameters(true));
// Set private key on our X509Certificate2
x509.PrivateKey = rsaPrivate;
Tuve el mismo problema y resolví importar el certificado usando este comando:
c:> certutil -importPFX certname.pfx
Ahora el certificado aparece usando este comando:
c:> certutil -store my
antes de este comando, el certificado no aparece
Tuve exactamente el mismo problema aunque mi archivo .pfx tenía clave privada. La adición del certificado con la consola de MMC fue exitosa, pero la adición de programas mediante el método .Net X509Store.Add (X509Certificate2) falló cada vez con el error 1312. El certificado incluso tenía un signo de clave en el icono.
Después de varios días finalmente decidimos hacer un nuevo certificado usando makecert.exe como se sugiere en las publicaciones aquí. Después de eso todo estuvo bien. La clave apareció en% ProgramData% / Microsoft / Crypto / RSA / MachineKeys. Por alguna razón, mi archivo pfx anterior no era compatible.
En mi experiencia, siempre y cuando su clave no aparezca en% ProgramData% / Microsoft / Crypto / RSA / MachineKeys /, la vinculación con ''netsh http add sslcert ....'' fallará.
Yo tenía el mismo error. La primera vez que ocurrió, como dijo Micheal, tuve que mover el certificado en Certificados (computadora local) -> Personal -> carpeta de certificados. Tuve el mismo error cuando importé el mismo certificado en otra máquina. La razón fue que estaba usando certmgr.msc para importar el certificado. . La ventana abierta muestra "Certificados - Usuario actual". Los certificados importados usando esta ventana causan que netsh falle con el error 1312. Asegúrese de utilizar el complemento de certificado en MMC para importar certificados. El complemento de certificado de MMC muestra "Certificados (computadora local)". Esto permite que la ejecución netsh navegue.
SSL Certificate add failed, Error 1312
A specified logon session does not exist. It may already have been terminated.
Solía tener exactamente el mismo problema y pasé un par de días tratando de descubrir cuál era el motivo.
Para winrm
el problema es que ha instalado el certificado en el servidor winrm
que no tiene PRIVATE KEY.
Lo he comprobado varias veces. Tienes que eliminar tu certificado y reconstruirlo usando makecert
por ejemplo, como se describe perfectamente aquí: http://blogs.technet.com/b/jhoward/archive/2005/02/02/365323.aspx
Puede verificar fácilmente si su certificado tiene una clave privada como tal: mmc
- certificates
- local machine
- personal
. Mire el ícono del certificado: DEBE tener un signo de llave en el ícono.