使用OpenSSL撤销CA证书

时间:2016-05-12 19:45:36

标签: python openssl certificate x509certificate

Python新手在这里!正如标题所暗示的那样,我正在寻找一种从序列号中撤销CA证书的方法。

我想通过使用pyopenssl的库(OpenSSL.crypto)来实现这一目标。使用此库可以使加载证书成为梦想。但是撤销它们完全不同。

以下是我的尝试:

import OpenSSL.crypto as crypto

def revoke_certificate(self, serial):
    crl = crypto.CRL()

    try:
        if not serial == self.get_ca_certificate().get_serial()
            filename = self.get_certificate_filename(serial)

            with open(filename, "r") as certificate_file:
                certificate_text = certificate_file.read()
                certificate = cr.load_certificate(crypto.FILETYPE_PEM, certificate_text)
                # Note: the certificate is type X509, so it gets properly loaded
                # So... this is not going to work
                crl.set_revoked(certificate)

            # irrelevant lines of code
            # ...
    except CustomError, e:
            # irrelevant logging lines of code
            # ...

    revoked = crl.get_revoked() 
    # obviously, revoked is going to be None
    revoked.set_serial(serial)
    now = self.get_current_time()
    revoked.set_rev_date(now)

    # the rest is also irrelevant
    # ...
    # ...

对于那些想知道的人,序列号确实是一个整数,而不是None对象。

我取消了不相关的代码行(与撤销无关)。 我很清楚,revoked = crl.get_revoked()会使revoked成为None个对象。

关于如何set_revoked OpenSSL.crypto.Revoked对象的任何想法?是否可以从certificate(来自with块)执行此操作?由于此certificate对象是OpenSSL.crypto.X509对象,因此不能将类型转换作为OpenSSL.crypto.Revoked对象。

谢谢你的帮助

0 个答案:

没有答案