# Certificat for a localhost WebService

**URL:** <https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894>\
**Category:** Aide (en français)\
**Created:** [February 22, 2021, 2:45pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894 "2021-02-22T14:45:03Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [February 22, 2021, 2:45pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/1 "2021-02-22T14:45:03Z")

</div>

Bonjour,  
J'ai créé un WebService qui tourne en localhost pour mes besoins de gestion de fichiers.  
J'y ai ajouter le https.  
L'appel du WS répond bien à mon url à partir d'une commande CMD (curl "https ...") et le WS fait ce que je lui demande.  
J'aimerais pouvoir lancer la même commande à partir d'un browser mais là, il bloque car ma clé localhost est une clé auto-signée et non trustée.  
Est-il possible d'obtenir un certificat pour cette clé localhost afin de lancer les url à partir d'un browser ?

Merci d'avance pour vos réponses  
Carmelo

---

<div class="post-metadata">

**Author:** ![griffin](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/griffin/32/50204_2.png) [@griffin](https://community.letsencrypt.org/u/griffin)\
**Post date:** [February 22, 2021, 6:52pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/2 "2021-02-22T18:52:17Z")

</div>

Bienvenue dans la Communauté Let's Encrypt, Carmelo 🙂

Cela dépend des certificats approuvés par votre navigateur. Lorsque vous obtenez un certificat d'une autorité de certification de confiance (comme Let's Encrypt), le certificat d'autorité utilisé pour signer votre certificat est déjà approuvé par votre navigateur, ce qui permet à votre certificat d'être approuvé. Une telle autorité de confiance ne signera pas de certificat d'hôte local car il n'existe aucun moyen de prouver la propriété unique de l'hôte local. Cependant, vous pouvez simplement installer votre certificat auto-signé dans votre navigateur pour qu'il soit approuvé ou créer et installer votre propre certificat d'autorité, puis l'utiliser pour signer votre certificat d'hôte local.

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [February 22, 2021, 9:00pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/3 "2021-02-22T21:00:12Z")

</div>

Bonsoir Griffin,

Merci la réponse 🙂  
Je vais vite tester ça et je vous tiens au courant.

---

<div class="post-metadata">

**Author:** ![griffin](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/griffin/32/50204_2.png) [@griffin](https://community.letsencrypt.org/u/griffin)\
**Post date:** [February 22, 2021, 9:44pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/4 "2021-02-22T21:44:39Z")

</div>

Ça sonne bien, mon ami. 🙂

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [February 26, 2021, 2:09pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/5 "2021-02-26T14:09:32Z")

</div>

Bonjour Griffin,

J'ai fait certaines opérations mais le browser refuse toujours.  
Voici la liste des opérations:

- avec keytool, je crée la clé localhost.jks auto-signée contenant le certificat alias localhost
- avec keytool, je fais un export de cette clé vers un fichier localhost.cer
- Je place la clé dans le répertoire de démarrage de mon WebService.jar (et dans le fichier de connexion du jar)
- Sans ça je n'obtiens même pas le message sur le browser (il ne voit pas du tout le localhost)
- J'installe le certificat localhost.cer dans Windows via mmc.exe (console.msc)  
---/ A ce niveau, le WS répond bien en ligne de commande CMD
- Puis je lance l'url du WS localhost sur le 4443 (pour laisser le 443 libre vu qu'il est utilisé par Apache)
- et j'obtiens l'erreur "votre connexion n'est pas sécurisée ..."
- je clique-droit sur le triangle rouge à gauche du lien, puis certificat, j'y lis que le certificat est valide
- sur l'onglet détail, je clique sur le bouton "copier vers un fichier", et je sauvegarde vers un nom de fichier.cer
- j'ouvre un onglet sur Chrome et tape l'url : Chrome://settings
- je vais dans la gestion des certificats et j'ajoute le certificat via "importer" et ce, dans le magasin de "Autorité de certification racines de confiance" et je l'ajoute . Par la même occasion, je me rends qu'apparemment, il s'y trouve déjà !?! Peut-être à cause du fait que je l'ai installé avec "console.msc" ?!
- je quitte le browser via "Quitter" et redémarre.
- résultat : j'ai toujours le même message "Votre connexion n'est pas privée"

j'aurais aimé vous envoyer des images mais je ne vois pas comment.

Faut peut-être que je précise que je me trouve à l'intérieur d'un "Intranet" et que mon pc est un pc de travail (avec toutes les sécurités nécessaires)

Merci d'avance pour votre aide

Carmelo

---

<div class="post-metadata">

**Author:** ![griffin](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/griffin/32/50204_2.png) [@griffin](https://community.letsencrypt.org/u/griffin)\
**Post date:** [February 26, 2021, 10:58pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/6 "2021-02-26T22:58:23Z")

</div>

Je serais très curieux de savoir pourquoi le navigateur indique que la connexion n'est pas sécurisée. Je soupçonne que c'est parce que l'hôte dans l'URL que vous visitez ne correspond à aucun des SAN (probablement le seul SAN) dans le certificat. Par exemple, un certificat pour `localhost` ne correspondra pas à l'adresse IP de l'hôte dans `https://127.0.0.1:4443/`. Le **nom** dans le SAN et le **nom** dans l'URL doivent correspondre. Le port n'a pas d'importance.

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [February 27, 2021, 10:18pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/7 "2021-02-27T22:18:07Z")

</div>

Bonsoir Griffin,

Tu veux dire que localhost n'est pas traduit par le broswer comme l'adresse https://[127.0.0.1](http://127.0.0.1):4443 ?  
Faudra-t-il alors mettre le nom de l'alias dans le certificat "127.0.0.1" au lieu de localhost ?

Merci et bonne soirée

Carmelo Peinado-Fernandez  
Rue Richebé 44  
7390 Quaregnon  
0474/26.23.68

---

<div class="post-metadata">

**Author:** ![griffin](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/griffin/32/50204_2.png) [@griffin](https://community.letsencrypt.org/u/griffin)\
**Post date:** [February 27, 2021, 10:29pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/8 "2021-02-27T22:29:28Z")

</div>

Le navigateur prendra tout hôte qui apparaît dans la barre d'adresse et le comparera directement aux hôtes (SANs) dans le certificat qui lui a été servi. Donc, si vous tapez "[https://localhost:4443/](https://localhost:4443/)" dans votre navigateur, l'un des hôtes du certificat (éventuellement le nom commun) doit être explicitement "localhost". Cela ne fonctionnera pas si l'hôte du certificat est 127.0.0.1 dans ce cas. La situation inverse s'applique également avec "[https://127.0.0.1:4443/](https://127.0.0.1:4443/)" dans le navigateur et "localhost" dans le certificat. Pour être sûr, vous pouvez inclure à la fois "localhost" et "127.0.0.1" en tant qu'hôtes (SANs) dans le certificat.

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [February 28, 2021, 12:38am UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/9 "2021-02-28T00:38:29Z")

</div>

Merci pour la réponse  
Dans un certificat, il n'y a t'il qu'un seul alias ?

Carmelo Peinado-Fernandez  
Rue Richebé 44  
7390 Quaregnon  
0474/26.23.68

---

<div class="post-metadata">

**Author:** ![griffin](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/griffin/32/50204_2.png) [@griffin](https://community.letsencrypt.org/u/griffin)\
**Post date:** [February 28, 2021, 1:30am UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/10 "2021-02-28T01:30:11Z")

</div>

Si par "alias" vous entendez des "noms de sujet alternatifs" (SANs), un certificat peut inclure jusqu'à 100 SANs. Cela signifie qu'en utilisant un seul certificat, les URL de jusqu'à 100 noms d'hôtes différents (noms de domaine, noms de sous-domaine, adresses IP, hôte local) peuvent être sécurisées.

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [February 28, 2021, 3:45pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/11 "2021-02-28T15:45:28Z")

</div>

Merci Griffin,

Je vais explore ça  
J'avoue que je suis encore novice en la matière.  
Je cherche d'ailleurs désespérément un tutoriel ou une formation pour bien comprendre les tenants et aboutissants 😉

Bonne fin de weekend

Carmelo Peinado-Fernandez  
Rue Richebé 44  
7390 Quaregnon  
0474/26.23.68

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [March 10, 2021, 10:53am UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/12 "2021-03-10T10:53:32Z")

</div>

Bonjour,

Lorsque je lance l'url dans une fenêtre de Chrome, il a d'abord le refus pour cause de certificat invalide.  
Ensuite, j'y parviens en créant un exception temporelle, c'est à dire que la requête avec parametres GET transmis au web service localhost est acceptée.  
Je ne parviens pas à créer une exception permanente.  
Le certificat du browser est celui que j'ai installé dans le pc (Windows).  
A partir d'une page en php dans laquelle se trouve un bouton, lors du OnClick, je lance l'url via javascript en créant un objet "XMLHttpRequest" qui lance une requête dans laquelle se trouve l'appel au WS localhost. Cette requête n'aboutit pas !  
En examinant le réponse de l'objet "XMLHttp", on voit que la réponse est "ERROR 404" page non trouvée (sans précision de la raison). Je pense vraiment (et après recherche sur Google) que la requête n'aboutit pas à cause du certificat non valide.  
Mon idée : je voudrais, si c'est faisable, créer via javascript une exception ponctuelle pour le certificat auto-signé.  
Merci de vos remarques et conseil

Carmelo

---

<div class="post-metadata">

**Author:** ![schoen](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/schoen/32/79_2.png) [@schoen](https://community.letsencrypt.org/u/schoen)\
**Post date:** [March 12, 2021, 11:34pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/13 "2021-03-12T23:34:43Z")

</div>

@tdelmas would you be willing to try to help out with this question?

---

<div class="post-metadata">

**Author:** ![tdelmas](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/tdelmas/32/1866_2.png) [@tdelmas](https://community.letsencrypt.org/u/tdelmas)\
**Post date:** [March 12, 2021, 11:40pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/14 "2021-03-12T23:40:46Z")

</div>

@carmelo Pouvez-vous confirmer que:

- Le certificat autosigné est bien pour le domaine `localhost`
- La connexion websocket est bien du style `wss://localhost:4443` (et _non_ `wss://127.0.0.1:4443`)

---

<div class="post-metadata">

**Author:** ![tdelmas](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/tdelmas/32/1866_2.png) [@tdelmas](https://community.letsencrypt.org/u/tdelmas)\
**Post date:** [March 12, 2021, 11:55pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/15 "2021-03-12T23:55:38Z")

</div>

S'il n'y a pas de problèmes de certificat, que voyez-vous dans la console réseau de Chrome ? Vous devriez voir une requête type websocket avec un status 101: [Kaazing | Inspecting WebSocket Traffic with Chrome Developer Tools | Kaazing](https://kaazing.com/inspecting-websocket-traffic-with-chrome-developer-tools/)

---

<div class="post-metadata">

**Author:** ![jvanasco](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/jvanasco/32/55900_2.png) [@jvanasco](https://community.letsencrypt.org/u/jvanasco)\
**Post date:** [March 13, 2021, 12:14am UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/16 "2021-03-13T00:14:22Z")

</div>

mon français est très mauvais, mais je voulais mentionner une alternative qui pourrait vous aider.

si vous utilisez dns-01 "acme challenge", il vous est possible d'obtenir un certificat pour un domaine comme `dev.yourdomain.com` avec une "dns record" `127.0.0.1`. alors vous utilisez simplement `dev.example.com` au lieu de` localhost`

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [March 13, 2021, 2:03pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/17 "2021-03-13T14:03:02Z")

</div>

Good morning and thank's for your answers.  
I continue in French, my English is very bad !  
J'ai lu cette possibilité de créer un domaine fictif pour le local mais j'ai aussi qu'on le déconseille pour raison de sécurité.  
Comme je l'ai dit plus haut j'obtiens ce que je veux à partir du browser si j'accepte les risques, c'est à dire que je fais une exception temporelle.  
Je cherche donc à savoir si, en JavaScript, on peut créer cette exception sans intervention de l'utilisateur.

Une autre concernant l'exception : comme se construit et où (cookies ?) ?

Ma requête ressemble à ceci :  
[https://127.0.0.1:4443](https://127.0.0.1:4443) mais j'ai également essayé [https://localhost:4443](https://localhost:4443) et j'ai exactement le même résultat

Merci d'avance  
Carmelo

---

<div class="post-metadata">

**Author:** ![h4ckd0wn](https://sea3.discourse-cdn.com/letsencrypt/user_avatar/community.letsencrypt.org/h4ckd0wn/32/47966_2.png) [@h4ckd0wn](https://community.letsencrypt.org/u/h4ckd0wn)\
**Post date:** [March 13, 2021, 2:38pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/18 "2021-03-13T14:38:05Z")

</div>

> Je cherche donc à savoir si, en JavaScript, on peut créer cette exception sans intervention de l'utilisateur.

C'est encore pire que de faire le domaine fictif

---

<div class="post-metadata">

**Author:** ![carmelo](https://avatars.discourse-cdn.com/v4/letter/c/8491ac/32.png) [@carmelo](https://community.letsencrypt.org/u/carmelo)\
**Post date:** [March 26, 2021, 2:57pm UTC](https://community.letsencrypt.org/t/certificat-for-a-localhost-webservice/145894/19 "2021-03-26T14:57:15Z")

</div>

Salut h4ckd0wn,

Je suis intéressé par ta soution de création d'un domaine fictif pour localhost, style [localhost.com](http://localhost.com)  
Peux-tu m'en dire d'avantage ?  
Au niveau de la clé, du certificat autosigné, au niveau du host file dans le pc ?

Merci d'avance  
Cpf
