2016-06-25 52 views
5

Sto lavorando all'interno del runtime di python 2.7 di Google App Engine (GAE).Posso firmare un certificato X509 interamente in Python?

Ho bisogno segno (e potenzialmente anche generare) un certificato X509 (.csr)

ho trovato diverse guides, che si basano su PyOpenSSL.

Come ho capito, PyOpenSSL è wrapper around OpenSSL e non disponibile in App Engine.
Pycrypto è disponibile, ma non ha un chiaro metodo di firma predefinito per X509.

Come posso firmare un .csr X509 utilizzando solo python?

+1

https://www.dlitz.net/software/pycrypto/api/current/Crypto.Signature.PKCS1_v1_5-module.html potrebbe essere quello che stai cercando? ... non sono sicuro se questo è uguale a x509 ... ma sembra che le specifiche di implementazione siano disponibili pubblicamente in modo da poter essere implementato ... ma sarà doloroso –

+0

Questo ti aiuta in qualche modo? http://stackoverflow.com/questions/23103878/sign-csr-from-client-using-ca-root-certificate-in-python –

+1

Python supporta l'ambiente Go lang ed è possibile creare un modulo che utilizza https: // golang .org/pkg/crypto/x509/- e chiamalo tramite l'API REST. –

risposta

2

faccio a firmare un certificato X509 interamente in Python?

Quasi certamente, ma non penso che esistano implementazioni Python pure esistenti. Il più vicino che ho trovato è oscrypto, ma la possibilità di firmare un certificato X509 dipende dal fatto che il modulo ctypes è disponibile.

L'autore ha anche scritto un modulo chiamato certbuilder, che dichiara di essere una "libreria Python per la generazione e la firma di certificati X.509", ma dipende dal modulo oscrypto.

Tuttavia, la vera domanda suona più come ...

faccio a firmare un certificato X509 su una Google App Engine Python standard Ambiente?

In questo caso, il modulo oscrypto probabilmente non aiuterà, poiché, secondo la documentazione, l'ambiente non consente l'utilizzo del modulo ctypes.

Si ha accesso al modulo PyCrypto, e anche se c'è a Python example di lettura di un certificato X509 utilizza, e un C++ example di verificare un certificato X509, i binding Python non sembrano avere un supporto completo per la codifica e la decodifica ASN.1. Potrebbe essere possibile combinare PyCrypto con asn1crypto dallo stesso autore di oscrypto per il supporto completo ASN.1.

Se nessuna di queste soluzioni sono di alcuna utilità, e da una GAE Python Flexible Environment o un GAE Custom Runtime dovrebbe lasciare che si installa il pacchetto PyOpenSSL, ma che avrebbe dovuto contattare il team di supporto tecnico per scoprirlo.

+1

oscrypto utilizzerà ctypes o cffi per chiamare la libreria crittografica del sistema operativo per la crittografia, la decrittografia, la firma e la verifica. Non fornisce primitive crittografiche pure-Python. – wbond

+0

@wbond Sembra improbabile che possa fornire una pura implementazione Python per la firma di un X509, ma grazie per la conferma. Ho aggiornato la risposta. – Aya

2

forse ho trovato una soluzione:

Cryptography.io è interamente basato su Python e offre anche un tutorial su come auto firmare un cert.

Felice di sentire altre risposte.

+0

Mentre scavo più a fondo .. sembra che si basino su OpenSSL come back-end. Lascerò questa risposta qui come pane, ma al momento sembra che questo non funzioni. –

+0

Altri breadcrumb: sembra che M2crypto possa farlo, ma non sono sicuro che si basi su OpenSSL https://gist.github.com/eskil/2338529 –

+1

M2Crypto è il wrapper Python più completo per OpenSSL, quindi no - he si affida anche a openssl. In realtà non penso, che nel mondo esista un uomo così pazzo, che si spalancherà al puro pitone, non può avere alcun senso. Nel tuo caso, puoi creare un servizio di segni cert su un host normale e utilizzarlo da GAE – Reishin

1

Questa non sarà la risposta diretta, perché non uso mai C e Cython, ma forse è possibile utilizzare qualche libreria C per questo compito.

Da Cython site:

Tutto questo rende Cython il linguaggio ideale per il confezionamento di C esterna librerie, incorporando CPython nelle applicazioni esistenti, e per veloci moduli C che velocizzano l'esecuzione di codice Python.

Sembra come non non le soluzioni migliori e più semplice, ma che è sapere :)

+0

Sfortunatamente, Appengine richiede che tutto il codice sia scritto in Python, nessun codice C. –