【问题标题】:Pyopenssl to verify the file signaturePyopenssl 验证文件签名
【发布时间】:2016-06-30 12:28:28
【问题描述】:

想用pyopenssl验证下载文件的签名和证书,但是文档不清楚,谷歌也帮不上忙。

我在用户的机器上有一个根 CA 证书,现在当用户下载文件时,我将连同它一起发送一个证书和签名。首先我需要在机器上使用 rootCA 验证证书,然后我需要使用文件验证签名

在 openssl 中我可以使用以下方法来验证 ca 证书

openssl verify -CAfile <root_pem> <cert_pem>

并跟随以验证文件

openssl dgst <algo> -verify <cert_pub_key> -signature <signature> <file>

我正在寻找使用 python 的等效方法,最好是 pyopenssl

【问题讨论】:

    标签: python pyopenssl


    【解决方案1】:

    我仍在学习一般的 OpenSSL,更不用说 PyOpenSSL。话虽如此,我能够使用以下内容在 PyOpenSSL 中验证文件(您的第二个命令):

    from OpenSSL.crypto import load_publickey, FILETYPE_PEM, verify, X509
    
    with open(file_to_verify, 'rb') as f:
        file_data = f.read()
    
    with open(signature_filename, 'rb') as f:
        signature = f.read()
    
    with open(public_key_filename) as f:
        public_key_data = f.read()
    
    # load in the publickey file, in my case, I had a .pem file.
    # If the file starts with
    #     "-----BEGIN PUBLIC KEY-----"
    # then it is of the PEM type. The only other FILETYPE is
    # "FILETYPE_ASN1".
    pkey = load_publickey(FILETYPE_PEM, public_key_data)
    
    # the verify() function expects that the public key is
    # wrapped in an X.509 certificate
    x509 = X509()
    x509.set_pubkey(pkey)
    
    # perform the actual verification. We need the X509 object,
    # the signature to verify, the file to verify, and the
    # algorithm used when signing.
    verify(x509, signature, file_data, 'sha256')
    

    如果验证成功(即它什么都不做),verify() 函数将返回 None,如果出现问题,它将引发异常。

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多