Así que estoy tratando de agregar SSL a mi servidor web que se ejecuta en mi pi B + (usando cherrypy)
Me aseguré de que OpenSSL estuviera instalado con:
sudo apt-get install openssl
Luego instalé pyOpenSSL con:
sudo apt-get install python-openssl
En ambos casos dice:
openssl is already the newest version.
python-openssl is already the newest version.
Porque ejecuté el comando más de una vez. Entonces esto parece estar bien.
Para entonces en Python cuando lo hago:
import OpenSSL
Me salen errores Específicamente:
Python 2.7.3 (default, Mar 18 2014, 05:13:23)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import OpenSSL
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module>
from OpenSSL._util import (
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 3, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding
¿Tengo un problema de compatibilidad aquí? ¿Las dos últimas versiones son incompatibles entre sí? ¿Alguien ha visto esto antes?
La información de la versión que tengo:
% openssl version
OpenSSL 1.0.1e 11 Feb 2013
Y para python-openssl tengo:
% dpkg -s python-openssl
Package: python-openssl
Status: install ok installed
Priority: optional
Section: python
Installed-Size: 532
Maintainer: Debian Python Modules Team <python-modules-team@lists.alioth.debian.org>
Architecture: armhf
Source: pyopenssl
Version: 0.13-2+rpi1+deb7u1
Depends: python (<< 2.8), python (>= 2.6), python-support (>= 0.90.0), libc6 (>= 2.13-28), libssl1.0.0 (>= 1.0.0)
Suggests: python-openssl-doc, python-openssl-dbg
Description: Python 2 wrapper around the OpenSSL library
High-level wrapper around a subset of the OpenSSL library, includes
.
* SSL.Connection objects, wrapping the methods of Python's portable
sockets
* Callbacks written in Python
* Extensive error-handling mechanism, mirroring OpenSSL's error
codes
.
A lot of the object methods do nothing more than calling a
corresponding function in the OpenSSL library.
Homepage: http://launchpad.net/pyopenssl
Cuando uso la bandera -v en python obtengo:
>>> import OpenSSL
import OpenSSL # directory /usr/local/lib/python2.7/dist-packages/OpenSSL
# /usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.pyc matches /usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py
import OpenSSL # precompiled from /usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.pyc
# /usr/local/lib/python2.7/dist-packages/OpenSSL/rand.pyc matches /usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py
import OpenSSL.rand # precompiled from /usr/local/lib/python2.7/dist-packages/OpenSSL/rand.pyc
# /usr/lib/python2.7/functools.pyc matches /usr/lib/python2.7/functools.py
import functools # precompiled from /usr/lib/python2.7/functools.pyc
import _functools # builtin
# /usr/local/lib/python2.7/dist-packages/six.pyc matches /usr/local/lib/python2.7/dist-packages/six.py
import six # precompiled from /usr/local/lib/python2.7/dist-packages/six.pyc
# /usr/lib/python2.7/__future__.pyc matches /usr/lib/python2.7/__future__.py
import __future__ # precompiled from /usr/lib/python2.7/__future__.pyc
import itertools # builtin
import operator # builtin
# /usr/lib/python2.7/StringIO.pyc matches /usr/lib/python2.7/StringIO.py
import StringIO # precompiled from /usr/lib/python2.7/StringIO.pyc
# /usr/local/lib/python2.7/dist-packages/OpenSSL/_util.pyc matches /usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py
import OpenSSL._util # precompiled from /usr/local/lib/python2.7/dist-packages/OpenSSL/_util.pyc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/rand.py", line 11, in <module>
from OpenSSL._util import (
File "/usr/local/lib/python2.7/dist-packages/OpenSSL/_util.py", line 3, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding
Respuestas:
Puede satisfacer la dependencia que falta haciendo lo siguiente:
instalar las bibliotecas libffi que necesita la criptografía
o
luego instale la criptografía:
fuente
Necesitaba reinstalar los paquetes:
Entonces empezó a funcionar para mí.
fuente
Acabo de probar esto en un B +; Parece funcionar para mi:
Sin embargo, no ejecuté un 'apt-get install openssl', solo uno para 'python-openssl'. Mi versión de Python parece ser idéntica a la suya: ¿qué versión de openssl se le informa?
El seguimiento de la pila que informa (al menos las últimas líneas) aparece en otro lugar de la web. Por ejemplo: https://mail.python.org/pipermail/python-bugs-list/2014-March/235055.html , aunque no hay respuesta allí :-(
Tal vez intente las importaciones que aparentemente causan un error, una a la vez como esta: estas funcionan en mi sistema:
Sin embargo, probé la otra importación que se menciona en último lugar en la pila, y esto ERROR cuando trato de importarlo directamente:
Además: este enlace StackOverflow parece ser casi lo mismo (en un contexto diferente) y tiene una solución que aparentemente funcionó:
/programming/24338840/installing-package-dependencies-for-scrapy
Tomando el enfoque de esta publicación de StackOverFlow: /programming/7332299/trace-python-imports
Intente ejecutar Python con una bandera '-v':
Me sale lo siguiente para comparar:
Y aquí está el SHA1 de los archivos a los que se hace referencia aquí:
¿Quizás faltan los archivos * .so / incorrectos en su sistema?
EDITAR: parece que mi entorno se está cargando desde una estructura de directorios diferente a la suya.
¿Es esto un 'entorno virtual': https://virtualenv.pypa.io/en/latest/ ? Si es así, ¿eso podría explicar la diferencia? Realmente no tengo una buena comprensión de cómo Python administra sus bibliotecas para ser honesto: ¡necesitará un experto en Python para enviarlo!
Además (para responder a su comentario sobre SHA1), no recuerdo si tuve que instalar un paquete en particular para obtener la herramienta ' shasum ', aparentemente es un script de Perl. Pero supongo que cualquier cosa que pueda generar una suma de comprobación (o incluso con solo presionar un 'ls -l') lo hará.
Una última información, en caso de que ayude a alguien a reducir el problema
fuente
Acabo de tener un problema muy similar en un Pi (B).
import OpenSSL
resultó en exactamente la misma respuesta errónea. La ejecuciónpip list
mostró pyOpenSSL como v 0.14.Después de agotar todas las demás ideas, eliminé pyOpenSSL usando
sudo pip uninstall pyOpenSSL
pip list
luego mostró pyOpenSSL como v0.13. Lo hicesudo pip uninstall pyOpenSSL
2 o 3 veces más, peropip list
aún muestra pyOpenSSL (0.13)Luego descubrí que
import OpenSSL
no mostraba un problema como antes. También el problema inicial que había estado solucionando desapareció mágicamente.Espero que esto ayude.
fuente
No hay problema en un Pi2B.
fuente
¡Esto funcionó para mí!
fuente