0

公開鍵と秘密鍵のペアがあり、公開鍵をサーバーの DNS TXT レコード (SPF レコード内) に送信し、秘密鍵ファイルを持っています。電子メール用の DKIM-Signature と DomainKey-Signature を作成したいので、テキスト メッセージを秘密鍵で暗号化してメール サーバーに送信したい. 暗号化ハッシュとして SHA-256 を使用し、公開鍵暗号化方式として RSA を使用したい. OpenSSL と C++ を使用して DKIM-Signature を作成したいおよび電子メールの DomainKey-Signature..

これは、サーバー TXT レコードの公開鍵です。

 -----BEGIN PUBLIC KEY-----
    MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnHVS+q65lvG2xocltTYgPGt9F
    aysGZTrcOwHedo8tX1dyPrcx2I8x/cvB9nmfdAkt65aGFAlBZrofbPCr2Mq4wDdv
    IZ31KSuyMQI4T68ylWNT89GewQF6AOkpY1E2bW+oDXc+MpbtpYXY1rUJAS/Abt5v
    Xi7gwKN9FSJ3mm9bjQIDAQAB
    -----END PUBLIC KEY-----

これは私の Privet キーです:

 -----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQCnHVS+q65lvG2xocltTYgPGt9FaysGZTrcOwHedo8tX1dyPrcx
    2I8x/cvB9nmfdAkt65aGFAlBZrofbPCr2Mq4wDdvIZ31KSuyMQI4T68ylWNT89Ge
    wQF6AOkpY1E2bW+oDXc+MpbtpYXY1rUJAS/Abt5vXi7gwKN9FSJ3mm9bjQIDAQAB
    AoGACXuxnmxRpjZOJ0FeE9TNfsXwm5jcRS2jbHHwxjYGI/YAGVyTusFmRtj3Iheh
    iTnld3SiAxPJ/qscrsHY2nef8Up60V7RF8bs+sbICnHbdz8ZoKxN9dEFCwJkIl55
    dv0GHjox6UgWUUkUAiHCM2EgG5eOOQ8PsuXY8LpPWLvfuyUCQQDbkFG9y/Q/3lmb
    CdYfBpsP3qvma+fdgCw9lRXTowhu0rKen/CC3rFkHMeHfSW9GHuR8QbPYdVA6d9H
    Y7KxYa7LAkEAwtjTEo/zAVexH/+YgiqL6w89BHlTAmwIEkXpqtAnE86kDDCekYdE
    fRIdGK1zHDOUddMAhwoJQjJzy/NJreQ8BwJBAMoJ6U3vKZjD8Ex8Jq5yE6nsyt3D
    mZ73XL5mO6l9sjrYY0kX/+dNKIro+KoyfNGef8bxtcSLUALlsnIsybf0HTUCQQCR
    DD4cvGJHJpOp4WkTxT6Bjsd6lCKyU9+yUq8/RFNC0HqYxHzWkx7uCFT2sPBXFyK2
    j4v9+v+ncs13DzZTJ+tzAkBI6UWHtsn839nrAT32M8PEPF/TuDmqebMhFOaTl4an
    W0Jr8w8iGk2gvQS2cXEPNh4XT9AgcTKDQkhui4RgxK4F
    -----END RSA PRIVATE KEY-----

OpenSSL のコード ヘルプをいくつか試しましたが、電子メールの DKIM-Signature と DomainKey-Signature を作成できません。

これはコードです:

#include <stdio.h>
#include <stdlib.h>
#include <openssl/bio.h>
#include <openssl/pkcs7.h>
#include <openssl/pkcs12.h>
#include <openssl/x509.h>

/ * Arguments: to be signed email, PKCS#12 certificate with private key
 */
int main(int argc, char** argv) {

    if (argc < 3) exit(1);
    OpenSSL_add_all_algorithms();

    BIO *data = BIO_new_file(argv[1], "rb");
    if (!data) exit(1);

    BIO *p12file = BIO_new_file(argv[2], "rb");
    if (!p12file) exit(1);
    PKCS12 *p12 = d2i_PKCS12_bio(p12file, NULL);
    if (!p12) exit(1);

    X509 *signcert;
    EVP_PKEY *pkey;
    STACK_OF(X509) *ca;
    int ret = PKCS12_parse(p12, "", &pkey, &signcert, &ca);
    if (!ret) exit(1);

    PKCS7 *p7 = PKCS7_sign(signcert, pkey, ca, data, 0);
    if (!p7) exit(1);

    BIO *out = BIO_new_file("email.eml", "wb");
    if (!out) exit(1);

    ret = SMIME_write_PKCS7(out, p7, data, 0);
    if (!ret) exit(1);

    BIO_free(data);
    BIO_free(p12file);
    PKCS12_free(p12);
    PKCS7_free(p7);

    return (EXIT_SUCCESS);
}

この "DKIM-Signature and DomainKey-Signature" を作成するためにテキスト付きの Privet キーを使用する方法を教えてください。

This is not working : BIO *p12file = BIO_new_file(argv[2], "rb");

「PKCS#12 証明書」を持っていないので、メールのテキスト メッセージでプライベート キーのみを使用して「DKIM-Signature および DomainKey-Signature」を作成するにはどうすればよいでしょうか????

4

1 に答える 1