Certificat for a localhost WebService

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

2 Likes

Bienvenue dans la Communauté Let's Encrypt, Carmelo :slightly_smiling_face:

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.

1 Like

Bonsoir Griffin,

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

2 Likes

Ça sonne bien, mon ami. :slightly_smiling_face:

1 Like

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

2 Likes

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.

1 Like

Bonsoir Griffin,

Tu veux dire que localhost n'est pas traduit par le broswer comme l'adresse https://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

1 Like

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/" 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/" 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.

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

1 Like

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.

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 :wink:

Bonne fin de weekend

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

1 Like

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

1 Like

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

2 Likes

@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)
1 Like

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

1 Like

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

1 Like

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 mais j'ai également essayé https://localhost:4443 et j'ai exactement le même résultat

Merci d'avance
Carmelo

1 Like

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

1 Like

Salut h4ckd0wn,

Je suis intéressé par ta soution de création d'un domaine fictif pour localhost, style 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