Problème bibliothèque waptcrypto

Questions about WAPT Packaging / Requêtes et aides autour des paquets Wapt.
Règles du forum
Règles du forum communautaire
* English support on www.reddit.com/r/wapt
* Le support communautaire en français se fait sur ce forum
* Merci de préfixer le titre du topic par [RESOLU] s'il est résolu.
* Merci de ne pas modifier un topic qui est taggé [RESOLU]. Ouvrez un nouveau topic en référençant l'ancien
* Préciser version de WAPT installée, version complète ET numéro de build (2.2.1.11957 / 2.2.2.12337 / etc.) AINSI QUE l'édition Enterprise / Discovery
* Les versions 1.8.2 et antérieures ne sont plus maintenues. Les seules questions acceptées vis à vis de la version 1.8.2 sont liés à la mise à jour vers une version supportée (2.1, 2.2, etc.)
* Préciser OS du serveur (Linux / Windows) et version (Debian Buster/Bullseye - CentOS 7 - Windows Server 2012/2016/2019)
* Préciser OS de la machine d'administration/création des paquets et de la machine avec l'agent qui pose problème le cas échéant (Windows 7 / 10 / 11 / Debian 11 / etc.)
* Eviter de poser plusieurs questions lors de l'ouverture de topic, sinon il risque d'être ignorer. Si plusieurs sujet, ouvrir plusieurs topic, et de préférence les uns après les autres et pas tous en même temps (ie ne pas spammer le forum).
* Inclure directement les morceaux de code, les captures d'écran et autres images directement dans le post. Les liens vers les pastebin, les bitly et autres sites tierces seront systématiquement supprimés.
* Comme tout forum communautaire, le support est fait bénévolement par les membres. Si vous avez besoin d'un support commercial, vous pouvez contacter le service commercial Tranquil IT au 02.40.97.57.55
croquebert
Messages : 28
Inscription : 30 mars 2022 - 17:41

14 avr. 2022 - 18:42

Bonjour,

Contexte:
WAPT version : 2.1 Entreprise
OS serveur : Debian 11
OS console d'administration : Win10pro
OS poste dev de paquets : Win10pro


Afin de chiffrer des secrets dans les paquets WAPT, j'utilise la bibliothèque waptcrypto comme dans l'exemple de votre documentation.

Sous certaine conditions, celle-ci lève une exception.

Cela semble être du à la présence du caractère slash mais seulement sous certaines conditions de position ou autres (un test avec une chaîne très simple contenant un seul slash fonctionne).

Voici le le code utilisé et la sortie d'erreur selon les cas: chaines fonctionnelles et chaines en échec.

**************************************************************

Code utilisé:

Code : Tout sélectionner

for value in data['result']:
        if value['host_certificate'] and value['computer_name']:
            host_cert = SSLCertificate(crt_string = value['host_certificate'])
            if pc_cfgs_jsoned_by_pc.get(value['computer_name'].lower(), 0):
                encrypttxt = pc_cfgs_jsoned_by_pc[value['computer_name'].lower()]
                #encrypttxt = 'chaine avec un / au milieu'
                print('texte à chiffrer:')
                print(encrypttxt)
                print('type du texte à chiffrer : {}'.format(type(encrypttxt)))
                encryptlist[value['computer_name']] = base64.b64encode(host_cert.encrypt(encrypttxt.encode('utf-8'))).decode('utf-8')
                #print(value['computer_name'] + ':' + value['uuid'] + ':' + encryptlist[value['computer_name']])
    print('en sortie')
    print(encryptlist)
    open('encrypt-txt.json','w').write(json.dumps(encryptlist))


Sortie lorsqu'une chaine fonctionnelle avec caractère slash est passée:

Code : Tout sélectionner

*** Remote Interpreter Reinitialized ***
Ligne de Commande : update-package-sources "C:\Users\moi\waptdev\monpaquetquichiffre-wapt\WAPT\.."
Using config file: C:\Users\moi\AppData\Local\waptconsole\waptconsole.ini
texte à chiffrer:
chaine avec un / au milieu
type du texte à chiffrer : <class 'str'>
en sortie
{'PCP102': 'uZaw3MxTlBZBNXNXnTqWC+YdY/uSAXr2IVJuewkHvXqye1k6sx+yl/nri+dux1aRtdA3JLsMmzggR47PGVtjPZS9Fka3+S0at1OnRwcH45EYEyd3AB5A9rvg2ANvEb//szHxQScu0nfbkA9zJFXvM8y1bUGkpUIZY03I7/uMuU+blFKNaTK3TVzNW9mHEIEkZiroG/VyRckhgd6Rb6eubNtuDdFwrtwhZ7qMQwxPopu5T0+jdIKP8FWtnJGIzQKBCsbepwOPuFkqx1xFl/7kMjq2Q2y9Hy3gIMTBFjqjt+buQJfU2wms/+J8oQCUhuazoGkmtUSBm6RWgc/uQgd4YA=='}
Packages updated :
   

Sortie lorsqu'une chaine fonctionnelle avec caractère slash est passée:

Code : Tout sélectionner

*** Remote Interpreter Reinitialized ***
Ligne de Commande : update-package-sources "C:\Users\moi\waptdev\monpaquetquichiffre-wapt\WAPT\.."
Using config file: C:\Users\moi\AppData\Local\waptconsole\waptconsole.ini
texte à chiffrer:
{"PrivateKey": "abcd", "Address": "10.0.0.1/32", "DNS": ["192.168.0.1", "mondomaine.fr"], "PublicKey": "abcd", "PresharedKey": "abcd", "EndPoint": "mamachine.mondomaine.fr:12345"}
type du texte à chiffrer : <class 'str'>
en sortie
{'PCP102': 'XFUQR+g5GoKG8f5h45SGYmhdRov/TTGGwga1T0k7jAl0jY4+NgCJepD5e+PrYBHD1xJMssv8Tn0u6P18U/RDsftcT9eJJGWedO9GVTfuXqvH4+pR9ApyPkEJe/U/G1wk4eNiPSHSknUAYF2WYUfWmFFnHl05Dk0MB5xmTiynS4CtrBuearAvf8+frvr2ah+jdqrkGgA+skBmvmeVfozW/lyZ5CMbW16ON9DKFjqlG/edDPYiGdsVuuGHohjO4drwdZp46/wOtTdifQBn0+gNSq6JA8AKVhEpqkk5OkopuUXDUHrzLVjtETH4Nno+mbDdbGzdBlQnIGy+zmzPjNNISg=='}
Packages updated :


Sortie lorsqu'une chaine fonctionnelle avec caractère slash est passée:

Code : Tout sélectionner

*** Remote Interpreter Reinitialized ***
Ligne de Commande : update-package-sources "C:\Users\moi\waptdev\monpaquetquichiffre-wapt\WAPT\.."
Using config file: C:\Users\moi\AppData\Local\waptconsole\waptconsole.ini
texte à chiffrer:
{"PrivateKey": "abcde/abcdefghijklmnopqrstuvwxyzabc/abcdef", "Address": "10.0.0.1/32", "DNS": ["192.168.0.1", "mondomaine.fr"], "PublicKey": "abcd", "PresharedKey": "abcd", "EndPoint": "mamachine.mondomaine.fr:12345"}
type du texte à chiffrer : <class 'str'>
2022-04-14 18:20:46,161 CRITICAL Fatal error in update_package function: ValueError: Encryption/decryption failed.:
Traceback (most recent call last):
  File "C:\Program Files (x86)\wapt\waptpackage.py", line 2973, in call_setup_hook
    hookdata = hook_func()
  File "C:\Users\roquebert\waptdev\set-wgconf_0-wapt\setup.py", line 139, in update_package
    encryptlist[value['computer_name']] = base64.b64encode(host_cert.encrypt(encrypttxt.encode('utf-8'))).decode('utf-8')
  File "C:\Program Files (x86)\wapt\waptcrypto.py", line 2284, in encrypt
    return self.rsa.encrypt(content, apadding)
  File "C:\Program Files (x86)\wapt\Scripts\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 484, in encrypt
    return _enc_dec_rsa(self._backend, self, plaintext, padding)
  File "C:\Program Files (x86)\wapt\Scripts\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 75, in _enc_dec_rsa
    return _enc_dec_rsa_pkey_ctx(backend, key, data, padding_enum, padding)
  File "C:\Program Files (x86)\wapt\Scripts\lib\site-packages\cryptography\hazmat\backends\openssl\rsa.py", line 133, in _enc_dec_rsa_pkey_ctx
    raise ValueError("Encryption/decryption failed.")
ValueError: Encryption/decryption failed.

FATAL ERROR : ValueError: Encryption/decryption failed.
Exit code:  3
**************************************************************


Cordialement.

Christophe
croquebert
Messages : 28
Inscription : 30 mars 2022 - 17:41

14 avr. 2022 - 19:14

Re-bonjour,

Après quelques rapides recherches il semble que ce soit plutôt une limitation sur la longueur de la chaine de caractère à chiffrer coté rsa.py. Après quelques tests la limite que j'ai rencontrée est à 215 caractères.

Du coup, avez-vous une solution pour chiffrer des chaines plus conséquentes (sans être obligé de faire un découpage et un ré-assemblage de la chaîne longue)?

Cordialement.

Christophe
Avatar de l’utilisateur
dcardon
Expert WAPT
Messages : 1373
Inscription : 18 juin 2014 - 09:58
Localisation : Saint Sébastien sur Loire
Contact :

15 avr. 2022 - 15:02

Bonjour Christophe,

merci pour le retour. J'ai forwardé le message à Hubert qui a développé une bonne partie de la librairie waptcrypto pour voir ce qu'il en pense.

Cordialement,

Denis
Denis Cardon - Tranquil IT
Communiquez autour de vous sur WAPT! Envoyez nous vos url de blog et d'articles dans la catégorie votre avis du forum, nous les mettrons en avant sur le site WAPT
croquebert
Messages : 28
Inscription : 30 mars 2022 - 17:41

15 avr. 2022 - 15:24

dcardon a écrit : 15 avr. 2022 - 15:02 Bonjour Christophe,

merci pour le retour. J'ai forwardé le message à Hubert qui a développé une bonne partie de la librairie waptcrypto pour voir ce qu'il en pense.

Cordialement,

Denis
Bonjour Denis,

Super, merci pour le retour.
Difficile pour moi de voir d'où ça provient sans les sources waptcrypto (passage d'arguments à des fonctions de rsa.py , bug ou limitation rsa.py), sauf à tester directement rsa.py ...
Pour l'instant, je vais découper mes chaines à chiffrer et les ré-assembler.
En attendant le retour d'Hubert sur le sujet.

Cordialement.

Christophe
croquebert
Messages : 28
Inscription : 30 mars 2022 - 17:41

15 avr. 2022 - 15:27

croquebert a écrit : 15 avr. 2022 - 15:24
dcardon a écrit : 15 avr. 2022 - 15:02 Bonjour Christophe,

merci pour le retour. J'ai forwardé le message à Hubert qui a développé une bonne partie de la librairie waptcrypto pour voir ce qu'il en pense.

Cordialement,

Denis
Bonjour Denis,

Super, merci pour le retour.
Difficile pour moi de voir d'où ça provient sans les sources waptcrypto (passage d'arguments à des fonctions de rsa.py , bug ou limitation rsa.py), sauf à tester directement rsa.py ...
Pour l'instant, je vais découper mes chaines à chiffrer et les ré-assembler.
En attendant le retour d'Hubert sur le sujet.

Cordialement.

Christophe
Autant pour moi, les sources de waptcrypto sont accessibles, je vais quand même laisser Hubert se pencher sur le sujet :-)
Avatar de l’utilisateur
htouvet
Expert WAPT
Messages : 402
Inscription : 16 mars 2015 - 10:48
Contact :

15 avr. 2022 - 17:24

Bonsoir,
Oui tout à fait, la taille est limitée.
Pour chiffrer des données plus longues, il y a la méthode SSLCertificate.encrypt_fernet(data)
qui chiffre en RSA une clé aléatoire symétrique, qui sert à chiffrer ensuite les données en AES-CBC

Et le pendant SSLPrivateKey.decrypt_fernet
Tranquil IT
croquebert
Messages : 28
Inscription : 30 mars 2022 - 17:41

15 avr. 2022 - 17:44

htouvet a écrit : 15 avr. 2022 - 17:24 Bonsoir,
Oui tout à fait, la taille est limitée.
Pour chiffrer des données plus longues, il y a la méthode SSLCertificate.encrypt_fernet(data)
qui chiffre en RSA une clé aléatoire symétrique, qui sert à chiffrer ensuite les données en AES-CBC

Et le pendant SSLPrivateKey.decrypt_fernet
Bonjour Hubert,

Merci pour ce retour.

En effet j'aurais pu m'en douter en allant voir : https://wapt.tranquil.it/wapt/nightly/a ... rypto.html

"Encrypt a (small) message will can be decrypted with the public key"

Où est indiquée la taille MAX pour encrypt afin de basculer sur encrypt_fernet en fonction celle-ci ?

Peut-on détecter la méthode utilisée pour le chiffrement de la chaîne afin d'appliquer la bonne méthode de déchiffrement ?

Cordialement.
Verrouillé