My apologies right off if this isn't in the right SO (Information Security or Crypto).Anyways, I'm trying to figure out how to validate SSL certs client side in Python. I found a callback function here that looks similar to other functions I've seen online. However, in my code I'm unsure of how (or why, really) it works. It seems to work when I run my code, but why (in PyCharm) are the first four parameters grayed out, and only the fifth in white? Is there a way I can use this callback function to check for particular certificate errors?
Here's the output when I run it
Certs are fine
Certs are fine
Certs are fine
b'HTTP/1.1 200 OK\r\nDate: Tue, 12 Apr 2016...etc
I assume each line of "Certs are fine" is validating each cert in the chain?
import socket
from OpenSSL import SSL
HOST = "www.google.com"
PORT = 443
def verify_callback(connection, x509, errnum, errdepth, ok):
if not ok:
print("Bad Certs")
else:
print("Certs are fine")
return ok
context = SSL.Context(SSL.TLSv1_2_METHOD)
context.load_verify_locations("cacerts.pem")
context.set_options(SSL.OP_NO_SSLv2)
context.set_verify(SSL.VERIFY_PEER | SSL.VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback)
# create socket and connect to server
sock = socket.socket()
sock = SSL.Connection(context, sock)
sock.connect((HOST, PORT))
sock.do_handshake()
sock.sendall("GET / HTTP/1.1\r\n\r\n")