IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

HTTP Public Key Pinning


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut HTTP Public Key Pinning
    Bonjour

    Je voudrais mettre des clés HTTP Public Key Pinning, mais je ne comprend pas trop le principe.

    J'ai mis 2 clés en header(), mais ce sont des clées publiques visbles ????

    J'ai crée ces clés aléatoirement random().

    Mais j'ai un gros doute lol...

    Je suppose qu'elles doivent avoir un lien avec une clé privé...

    Je suis plein de bonne volonté lol mais la je suis perdu.

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    - Est-ce que ton site est bien en https?
    - Est-ce que tu comprends les implications de l'utilisation du public key pinning?
    - Tu peux utiliser la clé publique ou un hash de la clé publique en header
    - Oui, elles ont un lien avec une clé privée: ce sont les clés publique et privée de ton certificat SSL

    En matière de sécurité, mieux vaut ne pas implémenter soi-même le code si possible et utilisée une bibliothèque écrite par des spécialistes, par exemple: https://github.com/paragonie/hpkp-builder (nécessite PHP 7).

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    - Oui je suis bien en h https? Oui je suis en https (hum ça commence bien lol)...

    - Est-ce que tu comprends les implications de l'utilisation du public key pinning? hum... je suis pas sur et les tutos ou explications sont dans un jargon informatique (programmateur) pas adaptés pour un non pro qui veux juste mettre en place des Public Key Pinning. Je ne veux pas devenir programmateur... je n'ai pas des problématiques de sécurités extrêmes... juste un utilisateur d'un petit blog qui se dit... si je mettais des Public Key Pinning ca serait plus sympa lol. Ça m’intéresse à titre perso lambda basique classique

    - Tu peux utiliser la clé publique ou un hash de la clé publique en header : Dans l'idée j'ai vu que des plugin wordpress utilisent des hash de la clé publique qu'ils mettent en cache 15 jours (2 clés)... mais je ne sais pas comment ils font pour récupérer ma clé publique et pour en faire un hash (un bout)

    - Oui, elles ont un lien avec une clé privée: ce sont les clés publique et privée de ton certificat SSL : faut il ne régénérer souvent ou elle est définitive... (si définitive pourquoi le mettre en cache).

    C'est un sujet ou les tutos s'adressent à des pros qui ont de très bonnes bases... mais il n'y a pas de tutos pour utilisateur lambda... simple et ludique...

    Comme je n'aime pas les plugins... et que j'aime comprendre un minimum... je me suis penché sur les header de Sécurité, mais pour les Public Key Pinning, je bloque ce n'est pas juste des réglages... il faut arriver a récupérer sa clé publique en faire un hash, mettre en cache.... et la cela dépasse mes connaissances lol

    Mais j'aimerais y arriver (comprendre simplement).

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    J'ai trouvé ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if(!isset($argv['1'])){
    	die('certificate not set');
    }
    $certificate = $argv['1'];
    $public_key = openssl_get_publickey(file_get_contents($certificate));
    $public_key_details = openssl_pkey_get_details($public_key);
    $public_key_pem = $public_key_details['key'];
    //Convert PEM to DER before SHA1'ing
    $string_start = '-----BEGIN PUBLIC KEY-----';
    $string_end = '-----END PUBLIC KEY-----';
    $pem_trimed = substr($public_key_pem, (strpos($public_key_pem, $string_start)+strlen($string_start)), (strlen($public_key_pem) - strpos($public_key_pem, $string_end))*(-1));
    $der = base64_decode($pem_trimed);
    // 47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU= is an empty hash
    echo PHP_EOL. "Header always set Public-Key-Pins 'pin-sha256=\"" . base64_encode(openssl_digest($der,'sha256',true)) ."\"; pin-sha256=\"bZ3qT75yZLagDEADBEEF0h3KAseeheXXJ5dliOfLB2A=\"; max-age=5184000'". PHP_EOL;
    Serait il possible d'avoir des commentaires sur la procédure

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    C'est normal que tu ne trouves pas des articles liés au HPKP à destination d'un public non spécialisé: ce sujet est déjà suffisamment difficile même pour les programmeurs. En matière de sécurité, mieux vaut s'y connaître (ou prendre le temps d'apprendre, ce qui nécessite des années) ou ne pas faire. Faire du sécurité à la va-vite, c'est le meilleur moyen pour se tirer une balle sur le pied tout en se croyant en sécurité. Il y a des dizaines d'erreurs que l'on peut faire en implémentant HPKP, et ce n'est pas sur un forum qu'un débutant va pouvoir apprendre à le réaliser correctement. Tu cours même le risque d'empêcher un jour tes visiteurs de visiter ton site en cas de HPKP mal implémenté.

    Soit ton site a vraiment besoin de la sécurité que ça apporte (sachant que très, très peu de sites s'en servent pour l'instant) et tu demandes à un pro de le faire, soit ton site n'en a pas besoin et dans ce cas laisse tomber. Il y a bien d'autres sujets en matière de sécurité abordable pour les débutants.

    Quant au morceau de code que tu as posté, c'est un script qui prend en entrée le certificat, extrait la clé publique du certificat, extrait la représentation en string de la clé publique, le décode, le hashe en sha256 et l'envoie avec les headers en tant que HPKP avec une durée de 2 mois.

    Déjà deux remarques dans cette implémentation:
    - d'où vient le hash de backup "bZ3qT75yZLagDEADBEEF0h3KAseeheXXJ5dliOfLB2A=" ? Cette valeur doit correspondre à une clé de secours que tu possèdes au cas où tu perds la clé principale. Ici, ça semble être une valeur sortie de nulle part
    - par conséquent, si tu perds la clé privée de ton certificat, les navigateurs qui ont en mémoire ta clé publique refuseront d'ouvrir ton site pendant une période allant jusqu'à deux mois.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Urbaniste
    Inscrit en
    Novembre 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Novembre 2016
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Oui je comprend qu'il faut mieux faire appel à un pro pour mettre en place la sécurité d'un site s'il ne nécessite...

    Mais pour le fun je voulais arriver à mettre en place le bout de code, juste pour comprendre, pour tester, pour le fun...

    Concernant :

    pin-sha256=\"bZ3qT75yZLagDEADBEEF0h3KAseeheXXJ5dliOfLB2A=\ c'est codé en dur dans le script (code exemple).

    Comment faire pour récupérer le hash de backup correspond à notre propre clé ?

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Le 2e hash ne correspond pas au certificat que tu utilises sur le site, il correspond à une autre clé (de secours) que tu dois posséder en réserve au cas où ton certificat principal se fait voler ou est révoqué ou expire et le replacement est fourni par un autre CA.

    Tu peux aussi épingler le certificat intermédiaire au lieu de ton propre certificat: ça t'évite d'avoir à épingler un hash de secours, tant que tes futurs certificats seront émis par le même intermédiare (le fournisseur de ton certificat).

Discussions similaires

  1. git push heroku master : Permission denied (public key)
    Par metal971 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 17/12/2014, 17h33
  2. store public key in LDAP
    Par gentelmand dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 29/04/2010, 14h04
  3. Certificat x509 et public key
    Par NouveauSurTerre dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 06/04/2009, 14h44
  4. Public GPG key
    Par cyreel dans le forum Sécurité
    Réponses: 6
    Dernier message: 14/05/2007, 12h12
  5. Publication d'un site web avec HTTP ou FTP ?
    Par Mohammed200 dans le forum Autres langages pour le Web
    Réponses: 1
    Dernier message: 07/12/2005, 16h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo