SSL certificat ajouter échoué lors de la liaison au port

j'ai créé un service Web en utilisant WCF. Je m'auto-héberge et je veux activer HTTPS. De ma compréhension pour que cela se produise, je dois créer un certificat et lier au port que je veux utiliser.

Voici les étapes que j'ai faites pour gérer cela:

  1. a créé un certificat sur ma machine locale pour agir comme Autorité de certification racine
    • makecert -n "CN=Mon Certificat Racine de l'Autorité" -r -sv RootCATest.pvk RootCATest.cer
  2. a ouvert MMC.exe et importé .cer fichier dans le "Certificat Racine de ConfianceCertificates
    • makecert-sk MyKeyName-iv RootCATest.pvk-n "CN=MyMachineName" - ic RootCATest.cer-sr localmachine ss-mon -ciel de change -pe MyMachineName.cer
  3. a créé un certificat de service temporaire à partir du certificat racine signé Autorité

    • makecert-sk MyKeyName-iv RootCATest.pvk-n "CN=MyMachineName" - ic RootCATest.cer-sr localmachine ss-mon -ciel de change -pe MyMachineName.cer
  4. a essayé de lier le certificat au numéro de Port (443 dans ce cas)

    • netsh http add sslcert ipport=0.0.0: 443 certhash=2c5bbbca412a74fece02878a44b285c63981 appid={646937c0-1042-4e81-a3b6-47d678d68ba9}

le résultat de l'étape 4 est l'erreur suivante:

certificat SSL ajouter échoué, erreur 1312

une session de connexion spécifiée n'existe pas. Il peut déjà avoir été résilié.

est-ce que quelqu'un sait pourquoi je pourrais avoir cette erreur?

43
demandé sur abatishchev 2012-10-26 00:42:36

20 réponses

j'ai eu la même erreur. La première fois, comme L'a dit Micheal, j'ai dû déplacer le certificat sous certificats(ordinateur Local) -->personnel -->dossier des certificats. J'ai fait la même erreur lorsque j'ai importé le même certificat sur une autre machine. La raison en était que j'utilisais certmgr.msc pour importer le certificat. . La fenêtre ouverte affiche ainsi "certificats-utilisateur courant". Les certificats importés en utilisant cette fenêtre provoquent la défaillance de netsh avec l'erreur 1312. Assurez-vous d'utiliser prise en charge des certificats en MMC pour les certificats d'importation. Le certificat snap-in de MMC montre " certificats (ordinateur Local)". Cela permet à l'exécution netsh de passer à travers.

38
répondu DiligentKarma 2013-04-18 18:02:37
SSL Certificate add failed, Error 1312

A specified logon session does not exist. It may already have been terminated.

j'avais le même problème et j'ai passé quelques jours à essayer de comprendre quelle était la raison.

pour faire court: le problème est que vous avez installé le certificat sur le serveur winrm qui n'a pas de clé privée.

j'ai vérifié cela plusieurs fois. Vous devez supprimer votre certificat et le reconstruire en utilisant makecert par exemple, comme il est décrit parfaitement ici: http://blogs.technet.com/b/jhoward/archive/2005/02/02/365323.aspx

vous pouvez facilement vérifier si votre certificat a une clé privée comme ainsi: mmc - certificates - local machine - personal . Regardez l'icône du certificat - il doit y avoir un signe clé sur l'icône.

31
répondu aceq aceq 2014-11-20 13:26:39

Je m'occupais de cette question et j'utilise un service auto-hébergé de la FMC. Je viens de faire la percée:

j'avais un certificat dans le dossier personnel du magasin de machines. Il a expiré et mon directeur en a publié un nouveau. La nouvelle a échoué pour moi avec cette erreur. J'ai essayé beaucoup de choses de Google, mais à la fin, résolu le problème en utilisant une solution complètement différente.

j'ai installé les deux certificats-le périmé et le plus récent un. Ensuite, j'ai utilisé cette commande pour obtenir une liste d'entre eux:

certutil -store My

j'obtiens ce résultat (l'info est fausse et les autres certificats ne sont pas listés):

================ Certificate 1 ================
Serial Number: 6d
Issuer: E=operations@voicetrust.com, 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: E=hgulzar@voicetrust.com, 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: E=operations@voicetrust.com, 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: E=hgulzar@voicetrust.com, 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

maintenant, tout semble OK mais le Certificat 1 est expiré et fonctionne si j'essaie de le lier à un port alors que le Certificat 2 échoue avec L'erreur 1312.

la principale différence qui m'a déconcerté était le nom Unique du conteneur propriété. Il devrait représenter un fichier clé physique sur le disque dur dans le %ProgramData%\Microsoft\Crypto\RSA\MachineKeys\

pour le Certificat 1, le dossier était là, mais pour le Certificat 2, Il n'y en avait pas. Après avoir cherché, j'ai trouvé le fichier contre le Certificat 2 dans le sous-dossier du dossier %AppData%\Microsoft\Crypto\ . Ce sont des clés spécifiques à l'Utilisateur, pas des clés au niveau de la Machine. Il est étonnant que le certificat soit importé dans un magasin D'informatique, mais il conserve toujours la clé du contenant du magasin de L'utilisateur.

j'ai supprimé le fichier' 55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b64-30f0d6589239 'sous le dossier AppData et j'ai exécuté la commande de réparation pour mon certificat 2 sur le magasin:

certutil -repairstore My 2

cette fois, le nom unique du conteneur reflétait un fichier dans le bon dossier sous '%ProgramData%\Microsoft\Crypto\' et tout a commencé à fonctionner.

J'espère que c'est utile à quelqu'un.

19
répondu Hassan Gulzar 2013-11-04 11:20:13

j'ai acheté un certificat officiel de dégel pour sécuriser un service Web auto-hébergé (application console) sur un port spécifique sur notre Serveur internet. J'ai alors reçu le certificat de dégel et je l'ai installé avec mmc sur notre Serveur Internet (le certificat était alors visible sous "Autorités de Certification racine de confiance") (avec l'icône de clé sur l'image, ce qui montre que le certificat contient une clé privée ce qui est obligatoire pour pouvoir le lier à un port b.t.m. w.) .

l'étape suivante était d'activer le <port> pour https:

netsh http add urlacl url=https://+:<port>/ user=everyone

(ce n'était pas un problème)

la prochaine étape était d'activer le port () pour https:

netsh http add sslcert ipport=0.0.0.0:<port> certhash=<thumbprint to certificate> appid={<guid to application>}

cela a échoué avec le message d'erreur:

SSL certificat ajouter échoué, erreur: 1312 une session d'ouverture de session spécifiée n'existe pas. Il est peut-être déjà été résilié.

j'ai alors cherché sur Internet et essayé diverses solutions de contournement suggérées (sans succès).

la solution pour mon cas était d'ajouter certstorename=Root à la commande netsh:

netsh http add sslcert ipport=0.0.0.0:<port *1)> certstorename=Root certhash=<thumbprint to certificate *2)> appid={<guid to application *3)>}

Notes:

Si no certstorename est appliqué à la commande netsh, netsh prend le défaut , qu'est-ce que mon (ce qui cible le magasin de certificats:" personnel " où auto-signé les certificats sont normalement stockés).

Root cible le magasin de certificats: les "Autorités de Certification Racine approuvées"

*1): le port, vous voulez utiliser la connexion

*2) : Vous pouvez extraire l'empreinte du pouce sur le certificat, si vous ouvrez le certificat (sur un système windows, il suffit de double-cliquer le certificat dans l'explorateur) - sélectionnez l'onglet "Détails" et cliquez sur "Empreinte". L'empreinte du pouce est alors affichée et peut être copiée. Copiez l'empreinte du pouce et supprimez tous les espaces...

*3): comme appid vous pouvez prendre n'importe quelle ID dans le formulaire {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx} comme APPID est seulement informative. Avec la commande "netsh http show sslcert" vous pouvez interroger les certificats liés sur l'ensemble de la machine et le voir informative, qui appid est lié à quel certificat (pas vraiment utile dans la pratique.b.t.w.) Dans mon cas, j'ai pris le (de VS généré) guide à mon application de service web

11
répondu FredyWenger 2017-01-18 13:20:59

j'ai lutté contre l'erreur 1312 toute la journée, ce qui m'a permis d'importer le certificat en mmc comme un .p12 fichier au lieu d'un .CRT. Si vous le Créez avec OpenSSL alors une fois que vous avez créé le .crt, n':

pkcs12 -export -in server.crt -inkey server.key -name “Your Name” -out server.p12

comme décrit . Lorsque vous allez l'importer dans mmc, il s'agira d'un fichier appelé "échange de renseignements personnels" (et apparemment A.le fichier pfx fonctionnerait aussi).

je suis nouveau pour écrire des serveurs et traiter avec SSL et je ne sais pas pourquoi cela fonctionne, mais j'espère que cela aidera.

9
répondu user3704925 2014-06-03 23:16:02

I mon cas le problème était que le fichier CER n'a pas de clé privée attachée.

j'ai joint PK en utilisant les commandes 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

fonctionne pour les fichiers CER/DER.

5
répondu Jacek 2014-06-11 11:10:25

le problème se trouvait à l'étape 4. J'utilisais l'empreinte du pouce du certificat racine pour la valeur de certhash. Pour résoudre ce problème, j'ai dû retourner au MMC et rafraîchir le dossier Certificats(ordinateur Local) -->personnel -->certificat. Utilisez ensuite l'Empreinte numérique du certificat "Délivré Par" l'Autorité de certification Racine.

4
répondu Michael Wilson 2012-10-26 18:12:45

il y a plusieurs façons de recevoir cette erreur (voir ci-dessus pour d'autres réponses).

une Autre façon de recevoir cette erreur spécifique est de tenter de lier un certificat à un port lorsque le certificat n'est pas dans le magasin approprié.

vérifier que le certificat est stocké dans la réserve de racines localMachine (vous pouvez utiliser certutil ou certmgr.exe en ligne de commande pour vider correctement).

mise à jour de la grammaire":)

2
répondu GMLewisII 2015-01-29 19:01:31

j'ai eu le même problème et j'ai résolu l'importation du certificat en utilisant cette commande:

c:> certutil -importPFX certname.pfx

maintenant le certificat apparaît en utilisant cette commande:

c:> certutil -store my

avant cette commande, le certificat n'apparaît pas

2
répondu user55993 2015-10-26 16:43:13

si:

  1. vous n'avez pas d'IIS sur votre machine de travail (avec auto-hébergé WCF disons), et
  2. vous avez fait votre demande de cert sur une autre machine en utilisant IIS Manager (parce que vous n'avez pas compris que la clé privée vient de chiffreurs intégrés dans la demande de cert - et plus tard le .pb7 émis)

puis:

  1. il suffit d'installer le .pb7 sur L'IIS machine que vous avez utilisée pour faire la demande cert (machine locale/personnel/certificats - en utilisant mmc);
  2. exporter le cert de cette machine, y compris sa clé privée (attribuer un mot de passe); et
  3. l'installer en utilisant mmc sur le serveur WCF (machine locale/personnel/certificats - en utilisant mmc).

ensuite, netsh vous permettra de vous lier au port 443. Plus d'erreurs 1312.

1
répondu Richard Torrone 2015-04-03 19:33:49

juste pour jeter encore une autre réponse dans le ring, c'est le problème que j'ai eu:

bien que j'aie importé mon certificat dans le magasin de certificats (Local Computer)\... , je l'avais importé dans la section Trusted Root Certification Authorities . J'ai dû l'importer dans la section Personal , sinon cette erreur s'est produite.

1
répondu Jez 2016-02-24 16:12:44

Cela peut sembler évident; cependant, je pense qu'il peut sauver quelqu'un certain temps de casse-tête. J'avais importé un fichier avec .extension cer sous mon dossier de certificats personnels (pour le compte D'ordinateur personnel). Après un certain temps, j'ai réalisé que j'avais besoin d'importer le fichier avec l' *.pfx extension à la place. Fixe et voilà! Problème résolu!

1
répondu Amadeus Sánchez 2017-01-09 17:13:12

si quelqu'un d'autre se heurte à ce problème et que les réponses données ici ne le résolvent pas clairement, le problème fondamental sous-jacent est que la clé privée doit être importée. Si vous faites et non , marquez le certificat comme étant exportable lorsque vous l'importez, la clé privée n'est pas importée et vous ne pouvez pas la lier. Si vous le supprimez et le réimportez et le marquez comme exportable, alors il fonctionnera.

il doit également être le magasin de machines locales comme d'autres ont souligné hors.

1
répondu Kendall Bennett 2017-09-27 21:00:27

j'ai eu exactement le même problème que moi .le fichier pfx avait une clé privée. L'ajout d'un certificat avec la console MMC a été un succès, mais l'ajout programmatique en utilisant .Net X509Store.La méthode Add(X509Certificate2) a échoué à chaque fois avec l'erreur 1312. Le certificat comportait même un symbole de clé sur l'icône.

Après plusieurs jours finalement décidé de faire nouveau certificat en utilisant makecert.exe comme suggéré dans les messages ici. Après que tout allait bien. La clé est apparue dans %ProgramData% \ Microsoft\Crypto\RSA\MachineKeys. Pour une raison quelconque, mon précédent fichier pfx n'était pas compatible.



D'après mon expérience, tant que votre clé n'apparaît pas dans %ProgramData%\Microsoft\Crypto\RSA\MachineKeys\, se liant avec 'netsh http add sslcert ...."échouent.

0
répondu Vedran 2015-01-29 08:51:42

l'argument certstorename doit être la valeur de la chaîne de caractères du StoreName énumération de l'espace de noms .net framework System.Security.Cryptography.X509Certificates .

0
répondu mbrownnyc 2016-06-09 14:45:13

je travaille là-dessus depuis des heures, et j'ai essentiellement lu ce que @DoomerDGR8 a dit plus haut, mais ma solution était beaucoup plus simple. J'ai couru

 C:\Windows\system32> certutil -store TRUSTEDPUBLISHER

cela énumérait plusieurs certificats que j'ai installés, j'ai alors couru magasin de réparation sur le certificat que j'avais un problème d'installation avec netsh.

C:\Windows\system32> certutil -repairstore TRUSTEDPUBLISHER 6

le numéro 6 à la fin représente l'index de votre certificat, trouvés dans le magasin, espérons que cette aide

0
répondu Dai Bok 2016-07-11 16:09:09

dans mon cas, lors de la création du certificat, j'ai choisi un nom différent du mien pour mon nom de magasin Cert. Le nom par défaut est MON. Ainsi, si le vôtre est différent, ajoutez le nom de votre magasin fourni à la commande certstorename= .

0
répondu Milad 2017-01-17 07:28:52

j'ai eu la même erreur en créant le certificat auto signé avec OpenSSL (BouncyCastle) Je l'ai résolu avec l'aide de ce post: ne peut pas exporter un certificat généré avec une clé privée vers le tableau byte dans .net 4.0 / 4.5

j'ai dû ajouter:

        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;
0
répondu RcMan 2017-05-23 12:26:26

donc pour ajouter (encore) fix/situation.

j'avais un code C qui utilisait BouncyCastle pour créer des certificats auto-signés.

<packages>
  <package id="BouncyCastle" version="1.8.1" targetFramework="net45" />

ainsi mon code a créé les certificats et les a placés aux bons endroits dans le Cert-Store.

en utilisant les conseils ici, mon installation du Bus de Service sur place 1.1 était en panne...et qui m'a conduit ici.

j'ai fini par supprimer les deux certificats que mon code de BouncyCastle avait créé (à partir du magasin cert) et réimporté (avec des clés privées)....et tout a bien fonctionné. J'ai d'abord importé au

Certificats (Ordinateur Local) / Personnel / Certificats

puis j'ai copié collé (dans le mmc) à d'autres endroits (magasins) j'en avais besoin.

Mon "avant" et "après", portait exactement la même chose de mes yeux dans la console MMC, MAIS il fixe le problème. Aller à la figure.

0
répondu granadaCoder 2017-04-28 19:37:53

je viens d'avoir une autre erreur. J'ai renouvelé un cert expiré pour notre service de dossiers de travail de notre AC en utilisant la même clé privée. J'ai toujours eu L'erreur 1312. Même si la gestion des certificats montre que j'ai une clé privée.

Je ne pouvais résoudre le problème qu'en réémettant un nouveau certificat (sans option de renouvellement). Puis ça a marché au premier essai.

Peut-être que cela aidera quelqu'un qui a aussi essayé l'option renew.

0
répondu clst 2017-05-08 10:56:13