Aller au contenu

Certificat pour l'accès depuis Internet + certificat pour l'accès local


Messages recommandés

Bonjour

J'ai un NAS DS211j sous DSM6.

J'y accède de 2 façons : depuis Internet (sur l'adresse publique de ma box qui est ensuite routé en NAT) et depuis mon réseau local (en https://192.168.0.x)

J'ai créé un certificat avec Let's Encrypt et cela fonctionne plutôt bien pour l'accès depuis Internet.

Mais ... je ne sais pas comment créer un second certificat pour l'accès local. J'ai tenté un certificat auto-signé (qui me semble l'option la plus logique), sans succès.

Sauriez-vous me dire comment faire ? si il y a une "bonne méthode" ?

Je vous remercie

Lien vers le commentaire
Partager sur d’autres sites

Il y a techniquement plusieurs manières propres d'arriver à tes fins, mais en pratique la plus simple (qui est aussi la plus conviviale et la plus performante) consiste à installer un serveur DNS dans ton réseau local.

Tu trouveras plusieurs tuto ici : http://www.nas-forum.com/forum/forum/28-tutoriels/

Si l'approche DNS ne te conviens pas et que tu es seul à utiliser le NAS, tu peux créer ta propre autorité de certification afin de mettre ce que tu veux dans tes certificats (nom de domaine+ip+...). J'ai fait ce script il y a quelques années, pas testé depuis, mais il devrait encore fonctionner :

#!/bin/sh

# license : WTFPL
################################################################################
#DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE                                   #
#                   Version 2, December 2004                                   #
#                                                                              #
#Copyright (C) 2014 Fenrir <don't want spam>                                   #
#                                                                              #
#Everyone is permitted to copy and distribute verbatim or modified             #
#copies of this license document, and changing it is allowed as long           #
#as the name is changed.                                                       #
#                                                                              #
#           DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE                        #
#  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION             #
#                                                                              #
# 0. You just DO WHAT THE FUCK YOU WANT TO.                                    #
################################################################################

# Directory where you want to install the stuff
baseDir="/volume1/CA"

# External domain name (from Internet)
extDomain='publicdomain.name'
# Internal domain name (from lan)
intDomain='privatedomaine.name'

# Server name
srvName=`hostname -s`
# External IP (from Internet)
extIP='0.0.0.0'
# Internal IP (from lan)
intIP=`hostname -i`

# Public server name
dns1=$srvName.$extDomain
# Private server name
dns2=$srvName.$intDomain
# Short server name
dns3=$srvName
# Public IP Address
ip1=$extIP
# Public IP Address
ip2=$intIP

# Country Name (2 letter code)
countryName_default='FR'
# State or Province Name (full name)
stateOrProvinceName_default='IDF'
# Locality Name (eg, city)
localityName_default='My City'
# Organization Name (eg, company)
organizationName_default='My Home'
# Organizational Unit Name (eg, section)
organizationalUnitName_default='IT'
# Email Address
emailAddress_default='my@email.address'

###################################################################
cd $baseDir
mkdir $baseDir/ca
mkdir $baseDir/ca/newcerts
mkdir $baseDir/crt
mkdir $baseDir/csr
mkdir $baseDir/key
mkdir $baseDir/rev

cat <<EOT > $baseDir/openssl.cnf
dir								= $baseDir
HOME							= $baseDir
RANDFILE						= $baseDir/ca/.rnd

[ ca ]
default_ca						= CA_default

[ CA_default ]
certs							= $baseDir/ca/certs
new_certs_dir					= $baseDir/ca/newcerts
database						= $baseDir/ca/index.txt
certificate						= $baseDir/ca/ca.crt
serial							= $baseDir/ca/serial
private_key						= $baseDir/ca/ca.key
default_days					= 3650
default_md						= sha256
preserve						= no
policy							= policy_match

[ policy_match ]
countryName						= optional
stateOrProvinceName				= optional
organizationName				= optional
organizationalUnitName			= optional
commonName						= supplied
emailAddress					= optional

[ req ]
default_md						= sha256
default_bits					= 2048
default_keyfile					= privkey.pem
distinguished_name				= req_distinguished_name
attributes						= req_attributes
req_extensions 					= v3_req
string_mask = nombstr

[ req_distinguished_name ]
countryName						= Country Name (2 letter code)
countryName_default				= ###countryName_default###
countryName_min					= 2
countryName_max					= 2
stateOrProvinceName				= State or Province Name (full name)
stateOrProvinceName_default		= ###stateOrProvinceName_default###
localityName					= Locality Name (eg, city)
localityName_default			= ###localityName_default###
0.organizationName				= Organization Name (eg, company)
0.organizationName_default		= ###organizationName_default###
organizationalUnitName			= Organizational Unit Name (eg, section)
organizationalUnitName_default	= ###organizationalUnitName_default###
commonName						= Common Name (eg, YOUR name)
commonName_max					= 64
emailAddress					= Email Address
emailAddress_default			= ###emailAddress_default###
emailAddress_max				= 64

[ req_attributes ]
challengePassword				= A challenge password
challengePassword_min			= 4
challengePassword_max			= 20
unstructuredName				= An optional company name

[ usr_cert ]
basicConstraints				= CA:FALSE
nsComment						= "OpenSSL Private Certificat"
subjectKeyIdentifier			= hash
authorityKeyIdentifier			= keyid,issuer
#nsCaRevocationUrl				= http://...
#nsRevocationUrl				= http://...

[ v3_req ]
basicConstraints				= CA:FALSE
keyUsage						= nonRepudiation, digitalSignature, keyEncipherment
subjectAltName					= @alt_names

[CA]
nsComment						= "OpenSSL Private Certificat"
subjectKeyIdentifier			= hash
authorityKeyIdentifier			= keyid,issuer:always
basicConstraints				= critical,CA:TRUE,pathlen:0
keyUsage						= keyCertSign, cRLSign
default_md						= sha256

[SERVER]
nsComment						= "OpenSSL Private Certificat"
subjectKeyIdentifier			= hash
authorityKeyIdentifier			= keyid,issuer:always
issuerAltName					= issuer:copy
basicConstraints				= critical,CA:FALSE
keyUsage						= digitalSignature, nonRepudiation, keyEncipherment
nsCertType						= server
extendedKeyUsage				= serverAuth
#crlDistributionPoints			= URI:http://...
subjectAltName					= @alt_names

[alt_names]
DNS.1							= ###dns1###
DNS.2							= ###dns2###
DNS.3							= ###dns3###
IP.1							= ###ip1###
IP.2							= ###ip2###

[ v3_ca ]
subjectKeyIdentifier			= hash
authorityKeyIdentifier			= keyid:always,issuer:always
basicConstraints				= CA:true

[ crl_ext ]
authorityKeyIdentifier			= keyid:always,issuer:always

[ proxy_cert_ext ]
basicConstraints				= CA:FALSE
nsComment						= "OpenSSL Private Certificat"
subjectKeyIdentifier			= hash
authorityKeyIdentifier			= keyid,issuer:always
proxyCertInfo					= critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo
EOT

sed -i "s/###countryName_default###/${countryName_default}/g" $baseDir/openssl.cnf
sed -i "s/###stateOrProvinceName_default###/${stateOrProvinceName_default}/g" $baseDir/openssl.cnf
sed -i "s/###localityName_default###/${localityName_default}/g" $baseDir/openssl.cnf
sed -i "s/###organizationName_default###/${organizationName_default}/g" $baseDir/openssl.cnf
sed -i "s/###organizationalUnitName_default###/${organizationalUnitName_default}/g" $baseDir/openssl.cnf
sed -i "s/###emailAddress_default###/${emailAddress_default}/g" $baseDir/openssl.cnf
sed -i "s/###dns1###/${dns1}/g" $baseDir/openssl.cnf
sed -i "s/###dns2###/${dns2}/g" $baseDir/openssl.cnf
sed -i "s/###dns3###/${dns3}/g" $baseDir/openssl.cnf
sed -i "s/###ip1###/${ip1}/g" $baseDir/openssl.cnf
sed -i "s/###ip2###/${ip2}/g" $baseDir/openssl.cnf

touch $baseDir/ca/index.txt
echo 0001 > $baseDir/ca/serial

openssl_bin=`which openssl`

# Create Certificate Authority
echo "################################################################################"
echo "#                                                                              #"
echo "#                        Create Certificate Authority                          #"
echo "#                                                                              #"
echo "################################################################################"
$openssl_bin req -new -x509 -config ./openssl.cnf -sha256 -newkey rsa:2048 -nodes -days 3650 -keyout ca/ca.key -out ca/ca.crt

# Create certificat request
echo "################################################################################"
echo "#                                                                              #"
echo "#          Create certificat request : take care about Common name             #"
echo "#                                                                              #"
echo "################################################################################"
$openssl_bin req -new -config ./openssl.cnf -newkey rsa:2048 -nodes -sha256 -keyout key/$srvName.key -out csr/$srvName.csr

# Signing the certificate
echo "################################################################################"
echo "#                                                                              #"
echo "#                           Signing the certificate                            #"
echo "#                                                                              #"
echo "################################################################################"
$openssl_bin ca -config ./openssl.cnf -extensions SERVER -in csr/$srvName.csr -notext -out crt/$srvName.crt

echo "################################################################################"
echo "#                                                                              #"
echo "#                             !!! PRIVATE !!! key                              #"
echo "#                                                                              #"
echo "################################################################################"
cat key/$srvName.key

echo "################################################################################"
echo "#                                                                              #"
echo "#                                 Certificate                                  #"
echo "#                                                                              #"
echo "################################################################################"
cat crt/$srvName.crt

 

Lien vers le commentaire
Partager sur d’autres sites

Merci Fenrir. Je viens d'installer le serveur DNS mais... j'ai une BBox Fibre et ... je ne peux pas demander à son DHCP de distribuer un DNS autre que celui de la BBox lui-même.

 

Cela voudrait-il dire qu'il faille que je désactive le DHCP de la BBox et que je fasse porter cette fonction par le NAS ?

Tout ça pour ne pas avoir le message "certificat valide" quand j'utilise mon Syno en local... ça ressemble à une massue pour écraser une mouche. Non ?

 

ps: au passage, je n'arrive pas à comprendre en quoi ce changement de DNS résoudra mon problème. Est ce que tu aurais une clé de compréhension ?

Modifié par mlelorra
Lien vers le commentaire
Partager sur d’autres sites

Il y a 8 heures, mlelorra a dit :

Cela voudrait-il dire qu'il faille que je désactive le DHCP de la BBox et que je fasse porter cette fonction par le NAS ?

C'est le plus simple.

Il y a 8 heures, mlelorra a dit :

ça ressemble à une massue pour écraser une mouche. Non ?

non, je ne trouve pas, c'est juste un petit changement pour palier aux manque de fonctionnalités de ta box

Il y a 8 heures, mlelorra a dit :

Est ce que tu aurais une clé de compréhension ?

Ton certificat est valide pour truc.domaine.fr, hors ce nom renvoi l'ip publique de ta box, même dans ton réseau interne

Avec un serveur DNS interne, tu vas pouvoir indiquer, uniquement aux clients internes, que truc.domaine.fr a pour ip l'adresse privée de ton nas.

ps : les autres méthodes (pki, loopback, hosts, quickconnect, ...) sont plus complexes, plus lentes et moins fiables

Lien vers le commentaire
Partager sur d’autres sites

Le 05/08/2017 à 18:38, Fenrir a dit :

Avec un serveur DNS interne, tu vas pouvoir indiquer, uniquement aux clients internes, que truc.domaine.fr a pour ip l'adresse privée de ton nas.

Ok,

Quel paramètre dois-je mettre pour que le DNS réponde truc.domaine.fr avec l'adresse privée de mon nas, seulement aux clients internes ? selon l'IP, je suppose ? mais à quel endroit je paramètre ça ? dans DNS server ? avec les zones ? les vues ? autre ?

Lien vers le commentaire
Partager sur d’autres sites

j'ai regardé (pour faire l''étape 1, notamment) mais sans succès pour l'instant.

Je ne comprends pas vraiment... donc... je suis les indications un peu à l'aveugle et même si je n'ai pas de blocage, ça ne semble pas fonctionner comme cela devrait

Modifié par mlelorra
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

... bon et bien après qq heures / jours à chercher, je n'ai pas réussi à appliquer l'étape 2 :(

En tout cas, je n'ai pas le comportement recherché car quand je fais https://adresse_locale_de_mon_nas, j'ai toujours l'erreur demandant validation du certificat

Une aide substantielle ?

Lien vers le commentaire
Partager sur d’autres sites

Il y a 5 heures, mlelorra a dit :

https://adresse_locale_de_mon_nas, j'ai toujours l'erreur demandant validation du certificat

C'est normal, ton certificat est valide pour https://nom.de.domaine, pas pour une IP.

Si je t'ai indiqué de suivre le tuto DNS c'est pour faire en sorte qu'en local, nom.de.domaine renvoi sur l'ip privée du nas, de la même manière que depuis Internet nom.de.domaine renvoi sur l'ip publique de ta box.

Lien vers le commentaire
Partager sur d’autres sites

Non, mais ça te permettra d'accéder à ton nas en LAN avec un certificat valide et sans message d'erreur si tu utilises son nom de domaine.

Si tu tiens vraiment à ne pas avoir de message d'erreur en te connectant en https avec l'adresse IP, tu n'as qu'une seule et unique solution (c'est ce que permet le script de mon premier post)  :

  1. créer ton autorité de certification
  2. installe la dans tous les navigateurs que tu utilises
  3. créé un certificat avec l'adresse IP + le nom de domaine et fait le signer par ton autorité
Lien vers le commentaire
Partager sur d’autres sites

Ahh oui, c'est bien plus complexe ! en tout cas, merci pour ton aide 

ps: ai je absolument besoin du serveur DNS pour accéder "correctement" au NAS en LAN avec un certificat valide et sans message d'erreur (si j'utilise son nom de domaine) ? j'avais l'impression que cela fonctionnait sans

Lien vers le commentaire
Partager sur d’autres sites

il y a 12 minutes, Fenrir a dit :

Si tu tiens vraiment à ne pas avoir de message d'erreur en te connectant en https avec l'adresse IP, tu n'as qu'une seule et unique solution (c'est ce que permet le script de mon premier post)  :

Oui mais à quoi bon se compliquer la vie alors qu'en utilisant la même url ça fonctionne nickel !

Lien vers le commentaire
Partager sur d’autres sites

il y a 20 minutes, mlelorra a dit :

ps: ai je absolument besoin du serveur DNS pour accéder "correctement" au NAS en LAN avec un certificat valide et sans message d'erreur (si j'utilise son nom de domaine) ? j'avais l'impression que cela fonctionnait sans

Non, si ta box gère le loopback ou que tu utilises QuickConnect ça peut fonctionner, ça sera juste plus lent et ça ne fonctionnera pas toujours

@Mic13710 : il préfère peut être se compliquer la vie :biggrin:

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.