예제 #1
0
def set_node_model(opts: CommonOpts, node_ssl_service) -> None:
    """
    Must be executed after set_network_info
    :param self:
    :param opts:
    :param node_ssl_service:
    :return:
    """
    node_model = None
    if opts.node_id:
        # Test network, get pre-configured peers from the SDN.
        node_model = sdn_http_service.fetch_node_attributes(opts.node_id)

    if not node_model:
        node_model = _register_node(opts, node_ssl_service)

    if node_model.cert is not None:
        private_cert = ssl_serializer.deserialize_cert(node_model.cert)
        node_ssl_service.blocking_store_node_certificate(private_cert)
        ssl_context = node_ssl_service.create_ssl_context(SSLCertificateType.PRIVATE)
        sdn_http_service.reset_pool(ssl_context)

    # Add opts from SDN, but don't overwrite CLI args
    default_values_to_update = [None, -1]
    for key, val in node_model.__dict__.items():
        if opts.__dict__.get(key) in default_values_to_update:
            opts.__dict__[key] = val
예제 #2
0
def fetch_cert(url: str) -> Certificate:
    """
    Fetch a certificate from a URL.
    :param url: the URL to the certificate file
    :return: a certificate object
    """
    with fetch_file(url) as cert_file:
        return ssl_serializer.deserialize_cert(cert_file.read())
예제 #3
0
def get_socket_cert(
        ssl_socket: Union[SSLSocket, ssl.SSLObject]) -> Certificate:
    """
    Obtain a peer certificate from an SSL socket.
    :param ssl_socket: the SSL socket object
    :return: a certificate object
    """
    der_cert = ssl_socket.getpeercert(True)
    pem_cert = ssl.DER_cert_to_PEM_cert(der_cert)  # pyre-ignore
    return ssl_serializer.deserialize_cert(pem_cert)
예제 #4
0
 def test_deserialize_cert(self):
     with open(self.cert_file_path, "rb") as template_cert_file:
         cert = ssl_serializer.deserialize_cert(template_cert_file.read())
     self.assertEqual(self.template_cert, cert)