refactor: use Any as a workaround for specific types that haven't been imported yet
This commit is contained in:
parent
96146be161
commit
61a92c5c63
1 changed files with 7 additions and 10 deletions
|
@ -2,6 +2,7 @@
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
from socket import socket
|
from socket import socket
|
||||||
|
from typing import List, Tuple, Any
|
||||||
import click
|
import click
|
||||||
from OpenSSL import SSL
|
from OpenSSL import SSL
|
||||||
from OpenSSL import crypto
|
from OpenSSL import crypto
|
||||||
|
@ -12,9 +13,7 @@ import idna
|
||||||
|
|
||||||
__version__ = "0.4.0"
|
__version__ = "0.4.0"
|
||||||
|
|
||||||
HostInfo = namedtuple(
|
HostInfo = namedtuple("HostInfo", ["cert", "hostname", "peername", "is_valid"])
|
||||||
field_names="cert hostname peername is_valid", typename="HostInfo"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def get_certificate(hostname: str, port: int) -> HostInfo:
|
def get_certificate(hostname: str, port: int) -> HostInfo:
|
||||||
|
@ -25,8 +24,6 @@ def get_certificate(hostname: str, port: int) -> HostInfo:
|
||||||
sock.connect((hostname, port))
|
sock.connect((hostname, port))
|
||||||
peername = sock.getpeername()
|
peername = sock.getpeername()
|
||||||
ctx = SSL.Context(SSL.SSLv23_METHOD) # most compatible
|
ctx = SSL.Context(SSL.SSLv23_METHOD) # most compatible
|
||||||
ctx.check_hostname = False
|
|
||||||
ctx.verify_mode = SSL.VERIFY_NONE
|
|
||||||
sock_ssl = SSL.Connection(ctx, sock)
|
sock_ssl = SSL.Connection(ctx, sock)
|
||||||
sock_ssl.set_connect_state()
|
sock_ssl.set_connect_state()
|
||||||
sock_ssl.set_tlsext_host_name(hostname_idna)
|
sock_ssl.set_tlsext_host_name(hostname_idna)
|
||||||
|
@ -44,7 +41,7 @@ def get_certificate(hostname: str, port: int) -> HostInfo:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_alt_names(cert: str) -> str:
|
def get_alt_names(cert: Any) -> Any:
|
||||||
"""retrieve the SAN values for given cert"""
|
"""retrieve the SAN values for given cert"""
|
||||||
try:
|
try:
|
||||||
ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName)
|
ext = cert.extensions.get_extension_for_class(x509.SubjectAlternativeName)
|
||||||
|
@ -53,12 +50,12 @@ def get_alt_names(cert: str) -> str:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_x509_text(cert: str) -> str:
|
def get_x509_text(cert: Any) -> Any:
|
||||||
"""return the human-readable text version of the certificate"""
|
"""return the human-readable text version of the certificate"""
|
||||||
return crypto.dump_certificate(crypto.FILETYPE_TEXT, cert)
|
return crypto.dump_certificate(crypto.FILETYPE_TEXT, cert)
|
||||||
|
|
||||||
|
|
||||||
def get_common_name(cert: str) -> str:
|
def get_common_name(cert: Any) -> Any:
|
||||||
"""Return the common name from the certificate"""
|
"""Return the common name from the certificate"""
|
||||||
try:
|
try:
|
||||||
names = cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME)
|
names = cert.subject.get_attributes_for_oid(NameOID.COMMON_NAME)
|
||||||
|
@ -67,7 +64,7 @@ def get_common_name(cert: str) -> str:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_issuer(cert: str) -> str:
|
def get_issuer(cert: Any) -> Any:
|
||||||
"""Return the name of the CA/Issuer of the certificate"""
|
"""Return the name of the CA/Issuer of the certificate"""
|
||||||
try:
|
try:
|
||||||
names = cert.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)
|
names = cert.issuer.get_attributes_for_oid(NameOID.COMMON_NAME)
|
||||||
|
@ -76,7 +73,7 @@ def get_issuer(cert: str) -> str:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def get_host_list_tuple(hosts: list) -> list:
|
def get_host_list_tuple(hosts: list) -> List[Tuple[str, int]]:
|
||||||
"""create a tuple of host and port based on hosts given to us in the form
|
"""create a tuple of host and port based on hosts given to us in the form
|
||||||
host:port
|
host:port
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue