2016-06-13 1 views
0

Je suis en train d'importer un certificat pkcs#12 dans OS X Keychain en utilisant la commande suivante:sécurité exécutant la commande d'importation de Python a un comportement différent de la ligne de commande

security import filename -k ~/Library/Keychains/login.keychain -P password -f pkcs12 

En python J'utilise subprocess comme ceci:

if os.path.isfile(_file) and platform.system() == 'Darwin': 
    keychain = os.path.expanduser('~/Library/Keychains/login.keychain') 
    command_line = 'security import {} -k {} -P {} -f pkcs12'.format(_file, keychain, password) 
    logger.info('Importing {} into OS X KeyChain.'.format(_file)) 
    return subprocess.call(shlex.split(command_line)) 

Cependant, je reçois ce message d'erreur:

security: SecKeychainItemImport: One or more parameters passed to a function were not valid. 

J'ai même essayé d'utiliser shell=True mais j'ai ensuite obtenu l'utilisation security comme si j'avais passé un mauvais argument.

Usage: security [-h] [-i] [-l] [-p prompt] [-q] [-v] [command] [opt ...] 
... 
... 

Cependant, quand il en cours d'exécution de la ligne de commande, la commande fonctionne comme prévu:

security import <filename> -k <home>/Library/Keychains/login.keychain -P DTWLDHPYNBWBJB3 -f pkcs12 
1 identity imported. 
1 certificate imported. 

Toute idée? Existe-t-il une restriction lors de l'exécution de security à partir d'une console non interactive?

Toute bibliothèque python pour atteindre le même?

Observe

Répondre

0

Ceci était en fait dû à un autre problème. J'utilisais un tmpfile qui n'était pas rincé ou fermé. Pendant l'exécution du script, la fonction n'a trouvé aucun contenu sur ce fichier. Une fois le script terminé, le fichier (qui avait 'delete = False') a été vidé et pour cette raison la ligne de commande ne fonctionnait pas.

La solution était de définir bufsize=0 :(