Simplemente tratando de establecer un simple servidor SSL. Nunca he tenido nada SSL trabajo para mí en el pasado. Tengo una suelta la comprensión de cómo los certificados SSL y la firma.

El código es sencillo

import socket, ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.load_cert_chain(certfile="mycertfile") ###############

bindsocket = socket.socket()
bindsocket.bind(('', 2099))
bindsocket.listen(5)

while True:
    newsocket, fromaddr = bindsocket.accept()
    sslsoc = context.wrap_socket(newsocket, server_side=True)
    request = sslsoc.read()
    print(request)

La línea con las ###s después de que él es el uno que no es de trabajo. No sé lo que tengo que hacer con openssl para generar un archivo PEM que el trabajo aquí.

¿Alguien puede aclararme cómo hacer este sencillo zócalo de trabajo.

Por cierto, esto NO es utilizado para HTTP.

Si eres susceptible a la utilización de trenzado, hay un buen ejemplo que utiliza OpenSSL: twistedmatrix.com/documents/current/core/howto/ssl.html Parece que requiere un certificado y una clave pública, donde se firma el certificado con la clave pública privada del par.
Eso es bueno, y se ve bastante simple, pero todo lo que necesito son los comandos para generar el archivo correcto a utilizar. Lo he probado hace un rato pero se puso muy extraño errores. Oviously yo no firmar correctamente o utilizar el archivo de la derecha.
Parece que hay un montón de tutoriales para esto, he intentado siguiendo a uno, por ejemplo? devsec.org/info/ssl-cert.html
probar: openssl req -x509 -nodes -days 7 -newkey rsa:2048 -keyout mycertfile.pem -out mycertfile.pem (google «crear auto-firmado certificado de prueba’)
En el futuro, cuando la publicación, por favor, no digas simplemente «no funciona», si no es una excepción, mensajes de error o cualquier otra cosa de diagnóstico impreso, a continuación, incluir que en la pregunta. Pie de la letra, lo de copiar y pegar, hacer no editar la información. Esto va a ayudar mucho llegar a las respuestas correctas. También, como se encontró el problema, entonces usted debe publicar que como una respuesta y aceptarlo. Esto ayudará a los visitantes a encontrar más fácilmente.

OriginalEl autor Caprin | 2012-06-29

1 Comentario

  1. 9

    puede utilizar este comando para generar un certificado auto-firmado

    openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem

    openssl marco le pedirá que introduzca cierta información, tal como su país, ciudad, etc. sólo siga las instrucciones y usted recibirá una cert.pem archivo. el archivo de salida tendrá su clave privada RSA, con el que se puede generar la clave pública y del certificado.
    el archivo de salida se parece a esto:

    -----BEGIN RSA PRIVATE KEY-----
     # your private key
    -----END RSA PRIVATE KEY-----
    -----BEGIN CERTIFICATE-----
     # your certificate
    -----END CERTIFICATE-----

    solo carga, y el ssl módulo se encargará del resto para usted:

    context.load_cert_chain(certfile="cert.pem", keyfile="cert.pem")

    por cierto, hay no «SSLContext» en python2. para los chicos que están usando python2, asigna el archivo pem cuando llegue el socket:

    newsocket, fromaddr = bindsocket.accept()
    connstream = ssl.wrap_socket(newsocket,
                                 server_side=True,
                                 certfile="cert.pem",
                                 keyfile="cert.pem",
                                 ssl_version=YOUR CHOICE) 

    disponible ssl versión: ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, ssl.PROTOCOL_SSLv3, ssl.PROTOCOL_SSLv23. si usted no tiene ninguna idea, ssl.PROTOCOL_SSLv23 puede ser tu opción ya que ofrece la mayor compatibilidad con otras versiones.

    para crear context, llamada ssl.create_default_context función (funciona en la reciente Python 2 versiones).
    Sé que este es un viejo post, pero debido a la vulnerabilidad POODLE nadie se debe aconsejar el uso de SSLv3 a través de TLS. Más información en en.wikipedia.org/wiki/POODLE

    OriginalEl autor Brian

Dejar respuesta

Please enter your comment!
Please enter your name here