¿Cómo puedo recuperar el certificado de igual TLS / SSL de un host remoto usando python?

Necesito escanear una lista de IP y recuperar el nombre común del certificado en esa IP (por cada IP que permita conexiones del puerto 443). He podido hacer esto con éxito usando los sockets y los módulos SSL. Funciona para todas las IP con certificados válidos y firmados, pero no funciona para certificados autofirmados.

Si uso este método, requiere un certificado válido verificado por mi paquete CA:

from socket import socket
import ssl

s = socket()
c = ssl.wrap_socket(s,cert_reqs=ssl.CERT_REQUIRED, ca_certs='ca-bundle.crt')
c.connect(('127.0.0.1', 443))

print c.getpeercert()

Si elimino lacert_reqs=ssl.CERT_REQUIRED luego se conecta pero no obtiene el certificado en absoluto.

¿Cómo puedo recuperar el nombre común de un certificado en una IP, ya sea que valide con el paquete ca o no?

Respuestas a la pregunta(4)

Su respuesta a la pregunta