Pourquoi un certificat SSL ne peut-il pas être utilisé pour plusieurs machines?
Voici la situation. J'apporte des modifications à une application, mais je n'ai pas d'environnement de test. Il y a un serveur QA pour l'équipe de test à utiliser, mais je préfère tester l'application sur ma machine locale (le déploiement de modifications sur ce serveur pourrait interrompre les testeurs). J'ai configuré l'environnement sur ma machine locale, mais il y a un problème.
l'application lit les données d'une application tierce. Il a besoin D'un certificat SSL pour se connecter à la troisième partie.
ma question est, pourquoi ne puis-je pas utiliser le certificat SSL du serveur QA sur ma machine locale?
j'ai fait une recherche superficielle sur le débordement de la pile, et il me semble qu'une fois que le certificat est émis par L'AC que n'importe quel ordinateur pourrait l'utiliser. À mon avis, j'ai mal compris une partie du processus SSL.
13 réponses
le certificat SSL est lié au nom de l'hôte. Si vous avez un certificat SSL pour "qa.example.com", il ne fonctionnera pas sur votre machine nommée "dev.example.com".
C'est peut-être le problème que vous avez.
je suppose que ce que vous décrivez effectue l'authentification du client SSL à un tiers distant. Que votre produit est à l'origine de la connexion à des tiers en tant que client et que le tiers décide si votre certificat est assez bon pour la connexion.
Un certificat est essentiellement trois choses:
- Une clé privée, qui ne doit être possédé par l'entité représentée par le certificat
- Une clé publique - clé partagée avec le monde
- des renseignements sur le certificat qui comprennent la clé publique ainsi que des données lisibles permettant d'identifier le détenteur de la clé - ces renseignements sont signés de façon cryptographique par l'émetteur du certificat.
... c'est un peu plus qu'un simple mot de passe, mais ce sont des données, à la fin.
la réponse à la question de savoir si vous pouvez installer un certificat client SSL à plusieurs endroits est oui et non. Cela dépend principalement des exigences de sécurité du système tiers et aussi comment vous avez stocké cette clé privée.
il est possible de stocker une paire de clés privées/publiques et un certificat dans un fichier - un standard pour cela est le PKCS #12. Les pkcs12 sont habituellement protégés par un mot de passe. De nombreux outils logiciels vous permettront de créer la paire de clés, de la stocker dans un PKCS12, et de faire les divers protocoles de certificat nécessaires pour demander et terminer la délivrance de certificats d'une tierce partie (je soupçonne que votre tierce partie exige que votre certificat signé par une liste de confiance des émetteurs). Chaque serveur d'application que j'ai vu vous a ensuite permis de configurer le fichier de certificat comme votre certificat côté client.
si c'est ainsi que le certificat QA SSL est stocké, alors il ne devrait pas y avoir de problème pour l'installer sur votre machine.
voici le hic - parfois la Politique de sécurité exige que les certificats soient stockés sur un jeton matériel. C'est typiquement une mesure de sécurité pour garantir qu'un seul l'entité peut utiliser le certificat. Copier des fichiers de certificats de logiciel fonctionne très bien dans un environnement de test, mais c'est une pratique de sécurité assez mauvaise pour une installation de produit de travail. Si le serveur QA utilise un jeton matériel, le matériel est susceptible de protéger la copie de la paire de clés privées à un autre endroit. Sans accès à la paire de clés privées, vous ne pourrez pas exécuter la requête SSL pour le tiers-démonstration de l'accès à la clé privée fait partie de la protocole.
dans ce cas, vous aurez besoin de demander votre propre certificat et une paire de clés pour accéder à la tierce partie - à moins que votre entreprise offre un mécanisme de partage de jetons matériels. Ce n'est pas tout à fait fou - certaines fermes de serveurs font cela - tous les serveurs ont la configuration de puiser dans un HSM commun, en réseau (module de sécurité matérielle) et d'utiliser la paire de clés. Cela est souvent vrai pour les certificats de site SSL, de sorte que tous les serveurs de la collection peuvent apparaître comme le même serveur. L'astuce est - ce genre de matériel est assez haut de gamme. Si vous faites des tests rapides et sales, je pense qu'il est peu probable d'avoir accès à ce genre de système.
je me renseignerais sur les certs logiciels et s'il est possible d'en avoir une copie. Il peut y avoir des raisons politiques pour l'interdire... mais ce n'est pas difficile de les installer, et si vous faites juste quelques tests, vous ne risquez vraiment rien.
je sais que c'est un vieux post et j'ai peut-être raté quelque chose, mais il semble que tout le monde a raté la vraie réponse ici. Si vous voulez avoir un seul certificat qui fonctionne sur plusieurs serveurs utilisant plusieurs noms d'hôtes/domaines, alors vous avez juste à acheter un certificat SAN. On le fait tout le temps au boulot...
c'est certainement possible de le faire, sinon comment les serveurs fonctionneraient-ils dans une ferme web? Tous les serveurs d'une ferme web ont le même certificat installé.
je n'ai pas d'expérience sur Apache, mais pour IIS le processus est documenté ici http://support.microsoft.com/kb/313299
les certificats SSL sont liés à un nom d'hôte. Donc, pour pouvoir l'utiliser sur votre machine dev, vous devez faire en sorte que le nom d'hôte soit résolu pour votre machine dev (c'est-à-dire en utilisant le fichier hosts)
typiquement pendant la poignée de main SSL, le nom d'hôte qui fait partie du certificat est assorti à le nom d'hôte de l'autre côté D'une connexion SSL. C'est pourquoi un certificat est lié à un nom d'hôte.
il y a plusieurs façons de s'en sortir.
- Utiliser un joker certificat.
- désactiver la vérification du nom d'hôte et accepter le risque accru.
- personnaliser la vérification du nom d'hôte.
Voir http://support.godaddy.com/help/article/567/what-is-a-wildcard-ssl-certificate et http://docs.oracle.com/javase/7/docs/api/javax/net/ssl/HostnameVerifier.html
@Kyle Jones -- ma question est, pourquoi ne puis - je pas utiliser le certificat SSL de le serveur QA sur ma machine locale?
@autonomatt -- Sous-question: VeriSign et d'autres entreprises vous demandent comment beaucoup de serveurs sur lesquels vous installez le certificat SSL ... l'obtention de l'étrange le client appelle en disant que son navigateur signale un problème w/ certificat. ..
Légalement? Vous pouvez installer le SSL Cert sur plus d'un ordinateur, mais peut ne pas être en mesure pour le faire légalement. La compagnie de CA signataire, comme Network Solutions, a une limitation légale sur votre achat. Lorsque vous achetez un certificat SSL, vous l'achetez pour installation sur un seul ordinateur. Vous devriez lire les conditions de l'AC de signature auprès de laquelle vous achetez le cert.
Techniquement? Techniquement, sauf pour certains serveurs SSL accélérés, oui vous pouvez copier la clé et le CRT sur n'importe quel serveur web pour servir une connexion SSL valide. Notez que certains certs SSL sont expédié/fourni par L'AC avec une chaîne de certificats qui doit également être installée du côté des serveurs. Sans la chaîne cert installée, le navigateur Web du client ne peut pas valider correctement le cert SSL. Vous devriez vérifier si une chaîne CA est fournie avec le certificat SSL fourni par L'AC signataire.
exigences de résolution IP. et le certificat SSL est lié à un nom d'hôte. Lorsqu'un navigateur web client fait une requête à un serveur, il se connecte à une adresse IP résolue à partir d'un nom de domaine, puis commence le processus de poignée de main SSL/TLS. Le serveur web répondant à cette adresse IP doit présenter le certificat SSL avec un nom commun demandé par le navigateur Web client via L'adresse IP. Cela signifie qu'un seul certificat SSL par adresse IP peut être configuré. Le client n'envoie que des requêtes HTTP 1.1 cryptées, de sorte que le serveur n'a aucune idée de ce qu'est la requête de domaine du client avant la fin de la poignée de main SSL/TLS.
hors production Résolution. Pour installer ailleurs, le navigateur web doit résoudre le nom d'hôte adresse IP correctement. Donc, si vous êtes dans un environnement de non-production, le client doit résoudre l'adresse IP différemment de l'environnement de production. Cela peut être effectué avec des serveurs DNS alternatifs, ou le fichier local des hôtes de toutes les machines nécessaires à la résolution DNS alternative.
processus D'installation technique. pour installer le certificat SSL sur une autre machine, copiez la clé, ssl CRT, et la chaîne CA dans les fichiers appropriés configurés pour le serveur Web. Si Apache, Tout peut aller dans le seul fichier PEM pour le certificat SSL.
puis assurez-vous que le serveur Web sert ce fichier PEM sur l'adresse IP qui résout pour le nom commun dans le certificat SSL.
Wildcard SSL Certs. certaines AC fournissent aussi des certificats SSL de type Willdcard, comme *.domain.com . Notez que le navigateur web doit reconnaître ce type de cert, et il ne protège qu'un seul sous-domaine niveau. Donc www.domain.com peut être protégé, mais www.sub1.domain.com provoquera une erreur de validation de la part du navigateur Web client.
Quelques raisons pour lesquelles les navigateurs web clients reçoivent SSL Cert erreurs de validation:
- si la chaîne CA est nécessaire mais non fournie par le serveur web.
- si L'AC de signature racine n'est pas une AC de confiance dans le navigateur Web Client autorisations SSL - ceci est toujours vrai pour auto-signé SSL Certificat.
- si le navigateur Web du client demande un domaine via SSL qui ne correspond pas au nom commun du certificat SSL.
- si le navigateur client ne peut pas accéder aux points de Distribution x509 CRL à partir de L'AC de signature - ainsi, un client sur un réseau restreint ou fermé ne pourra pas valider le certificat SSL. L'URL de la LCR est fournie pendant la poignée de main SSL/TLS. Voir aussi:http://en.wikipedia.org/wiki/Revocation_list#Problems_with_CRLs .
Le certificat contient des informations: 1) Détails Comme le nom, le domaine, l'adresse, la date d'expiration de la clé, etc sur la société/individu qui détient le certificat. 2) Il a la clé publique. 3) Quelques données cryptées. C'est là l'essentiel.
C'données chiffrées sont tous les userinfo ainsi que la clé publique dans le certificat qui a été signé par la clé Privée de l'AC qui a émis le certificat.
Lorsque le Navigateur reçoit le certificat, il essaie de conception données cryptées à l'aide de la clé publique de L'AC déjà intégrée dans le navigateur. Ainsi, si toutes les informations présentes dans le certificat correspondent après la suppression de la signature, le propriétaire du domaine mentionné dans le certificat s'assure qu'il possède la clé privée correspondant à la clé publique mentionnée dans le certificat.
donc, l'essentiel est, si quelqu'un publie (comme les sites Web font) que je suis le propriétaire du certificat, cela signifie que, personne / entreprise possède la clé privée correspondante pair.
alors revenons à la question: le vrai problème est que "l'application lit les données d'une application tierce. Il a besoin d'un certificat SSL pour se connecter au tiers."
et ce ce certificat est destiné. Fondamentalement, votre application souhaite faire une connexion SSL avec l'application tierce partie, et si vous avez le certificat, vous êtes tous prêts. Donc, au début je suppose que vous avez mis le certificat dans le mauvais répertoire de sorte que votre application n'est pas capable de le lire et pas capable d'établir une connexion ssl avec le tiers. Ou un fichier de configuration question.
je sais que cette réponse ne sert à rien, mais j'ai préféré écrire ce que je ressens.
je pense que vous avez besoin d'élaborer sur votre environnement un peu plus, mais peut-être que vous n'avez pas copié la partie clé privée du certificat à votre machine locale. Les clés privées et publiques sont nécessaires pour utiliser le certificat. Je suppose que depuis que vous écrivez "lecture à partir d'un tiers" que vous utilisez un certificat client.
dans ces situations, le Tiers fait généralement l'une des deux choses. Vous donner accès à un bac à sable QA qui ne nécessite pas de cert. ou vous permettre de faire un cert temporaire qu'ils accepteront qui n'est pas validé par une autorité de certification. Il serait étrange qu'un tiers fournisseur de services web ne prévoie pas la nécessité d'avoir un AQ et un prod différents. environnement.
bien techniquement, un certificat (exporté à partir de ces outils de L'ICP) ne contiendra pas de clé privée. Ainsi, même dans un environnement où la charge est équilibrée, la simple copie d'un certificat n'aidera pas??
en outre, lorsque nous produisons des certs à l'aide d'outils ICP, vous pouvez fournir une chaîne de caractères arbitraire pour le DN (comme "CN=xyz, OU=ttr, O=x"). Je me demande quel serait le comportement si différentes machines utilisent le même DN pour créer les certs?
je crois comprendre que ma réponse à cette question est trop tardive..mais j'ai rencontré le même problème aujourd'hui en installant le même certificat sur 2 serveurs dans une Configuration Load Balancer, OS =Windows 2008/ IIS 7.5 et j'ai pu trouver la solution.
j'ai pu l'installer sur le premier serveur en cliquant sur 'Complete Certificate Request' et en naviguant à l'endroit où le certificat 'abc.cer' est situé (supposons que vous avez déjà le certificat avec vous.) Puis j'ai copié le même 'abc.cer' sur le second serveur et essayé 'Complete Certificate Request' et cela ne fonctionnerait pas. Le certificat apparaîtrait comme installé mais disparaîtrait dès que je rafraîchis le Gestionnaire de L'IIS. Puis j'ai essayé l'option "Exporter" le certificat à partir du premier serveur (il génère un .pfx extension file) et ensuite importé la même chose sur le deuxième serveur. Cette méthode a fonctionné.
Cela dépend de ce que vous entendez par cette
Un certificat wildcard peut être utilisé pour plusieurs hôtes avec différents enregistrements.
par exemple vous avez un certificat de Joker pour le domaine *.stackoverflow.com.
vous pouvez faire approuver TLS par L'AC tant que les nouveaux serveurs que vous utilisez utilisent un sous-domaine du domaine stackoverflow.com
i.e.
mail-server.stackoverflow.com