zoukankan      html  css  js  c++  java
  • 09.openssl高级编程

    10.1通用形式的堆栈操作函数
    STACK_OF(TYPE) *sk_TYPE_new_null(void);
    void sk_TYPE_free(STACK_OF(TYPE) *st)
    void sk_TYPE_pop_free(STACK_OF(TYPE) *st, void (*free_func)(TYPE))
    void sk_TYPE_zero(STACK_OF(TYPE) *st);
    STACK_OF(TYPE) *sk_TYPE_dup(STACK_OF(TYPE)*st) ;

    int sk_TYPE_push(STACK_OF(TYPE) *st, TYPE *val);
    TYPE *sk_TYPE_pop(STATCK_OF(TYPE) *st)
    int sk_TYPE_unshift(STACK_OF(TYPE) *st, TYPE *val)
    TYPE *sk_TYPE_num(STACK_OF(TYPE) *st);
    TYPE *sk_TYPE_value(STACK_OF(TYPE) *st, int i)
    TYPE *sk_TYPE_set(STACK_OF(TYPE) *st, int i, TYPE *val);
    TYPE *sk_TYPE_delete(STATCK_OF(TYPE) *st, int i)
    TYPE *sk_TYPE_delete_ptr(STACK_OF(TYPE) *st,TYPE *ptr);
    int sk_TYPE_insert(STACK_OF(TYPE) *st, TYPE *val, int i);


    10.2 Configuration Files

    10.3 X.509
    在前面的章节中,我们详细讨论了证书。
    我们将介绍以编程方式处理X.509系列操作的几个方面。要做到这一点最为合理,我们首先看看生成证书请求的正确方法。 我们也会看看请求本身的几个常见操作。 一旦我们知道如何提出请求,我们将看看用于从证书申请中创建一个完整的证书的函数。 最后,我们将讨论如何验证证书链。 我们已经讨论了SSL连接的这个过程,但是在处理X509时,我们将重点介绍验证对象。

    10.3.1 Generating Requests
    X.509证书是一个与证书所有者和发行者有关的信息打包的公钥.

    int OBJ_txt2nid(const char *field);
    X509_NAME_ENTRY *509_NAME_ENTRY_create_by_NID(X509_NAME_ENTRY *ne,int nid,
    int type, unsigned char *value, int len);
    int X509_NAME_add_entry(X509_NAME *name, X509_NAME_ENTRY *ne, int set)

    10.3.2 Making Certificates
    步骤
    a.验证证书申请并检查其内容(subjectName和这个例子中的subjectAltName)来决定我们是否希望使用我们的CA来验证数据证书。
    b.创建一个新的证书,并设置所有必要的字段,如公钥,主题和发行者名称,截止日期等。
    c.将适用的扩展添加到证书,
    d.使用CA的私钥签署证书。


    10.4.1 Signing and Verifying
    PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509)*certs,BIO *data, int flag)
    int SMIME_write_PKCS7(BIO *bio, PKCS7 *p7, BIO *data, int flags);
    PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont);
    int PKCS7_verify(PKCS7 *p7, STACK_OF(X509) *certs, X509_STORE *store,BIO *indata, BIO *out, int flags);

    10.4.2 Encrypting and Decrypting
    PKCS7 *PKCS7_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER
    *cipher,int flags);
    int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data,int flags);

    10.4.4 PKCS#7 Flags
    PKCS7_NOINTERN
    验证过程不会使用嵌入在对象中的证书进行签名验证,即事先必须知道对等证书的成功
    验证。

    PKCS7_NOVERIFY
    在验证PKCS#7对象时,不要尝试验证签名者的证书。 签名仍然会被检查。

    PKCS7_NOCERTS
    签名过程不会向生成的对象添加任何额外的证书。

    PKCS7_DETACHED
    签署数据时不要在生成的对象中包含签名者的证书。

    PKCS7_NOSIGS
    不要验证PKCS#7对象上的签名。

    10.5 PKCS#12
    PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509
    *cert,STACK_OF(X509) *ca, int nid_key, int nid_cert,int iter, int mac_iter, int keytype);

    PKCS12 *d2i_PKCS12_fp(FILE *fp, PKCS12 **p12);

    int PKCS12_parse(PKCS12 *p12, const char *pass, EVP_PKEY **pkey, X509
    **cert, STACK_OF(X509) **ca);

  • 相关阅读:
    项目alpha冲刺-测试
    项目Alpha冲刺--9/10
    项目Alpha冲刺--8/10
    项目Alpha冲刺--7/10
    项目Beta冲刺(1/7)(追光的人)(2019.5.23)
    Beta之前-凡事预则立(校园帮-追光的人)
    事后诸葛亮(追光的人)
    问题回答
    Alpha冲刺总结
    Alpha冲刺(10/10)——追光的人
  • 原文地址:https://www.cnblogs.com/aixiaoxiaoyu/p/8232803.html
Copyright © 2011-2022 走看看