2017-07-30 7 views
1

私はiOS/macOSユーティリティを使用するhobbist開発者です。私はいくつかのopensslコマンドに苦労しています。 私は、コンソールコマンドに関連付けられたC関数を知っていただきたいと思いコンソールコマンドから機能へのOpenSSL

openssl smime -sign -signer *certificate.cer* -inkey *miPrivateKey* -out *outFile* -in *inFile* -outform PEM -nodetach

termninalのMacOSでのopensslコマンドを実行します。特にこの1つアップ。 ターミナルコマンドから実行される関数への参照を見つける方法はありますか? 呼び出されている関数を知る方法はありますか? すべてのライブラリと呼び出しメソッドが正常に読み込まれましたが、これを作成する方法や呼び出し関数についてはわかりません。 ありがとうございました。

答えて

1

Iは、iOS/MacOSのユーティリティを使用していますhobbyst開発者です...

アップルは、OpenSSLの古代のバージョンを配布しています。バージョン0.9.8。 TLS 1.2、Sever Name Indication、ほとんどのElliptic Curveギアなどの欠品があります。

通常、ホームブリューまたはMacportsを使用して新しいバージョンをインストールします。そのためには、以下を参照してください


は、私はサブコマンドと呼ばれるtermninal openssl smime...

smimeのMacOSにopensslコマンドを実行します。OpenSSLはそれらの多くを持っています

  • enc
  • dec
  • s_client
  • s_server
  • smime
  • など

コンソールコマンドに関連するC関数について知りたいと思います。特にこの1つアップ。

サブコマンドのソースコードは、<openssl src>/appsディレクトリにあります。 smimeコマンドについては、smime.cを参照してください。

+0

ありがとう!!!ちょうど私が必要としたもの –

+0

私はこのファイルを読んでいたので、動作させることはできません。 ご協力ありがとうございます。 –

+0

@Carlos - 私はおそらく髪の毛を分割していますが、 "...私は仕事をすることはできません" *あなたの質問の一部ではありませんでした。実際に、あなたは何を試したのか、何がうまくいかなかったのかは一度も述べていません。私は答えたあなたの質問を引用した。別の質問がある場合は、新しい質問をする必要があります – jww

1

それはパラメータに完全に依存しますが、これはSMIME署名のために、それの要旨は...例えば、私が署名アップル-財布のためにこれを使用している(削除エラーは、それを簡単にするためにチェック):

#include <openssl/bio.h> 
#include <openssl/ssl.h> 
#include <openssl/err.h> 
#include <openssl/pkcs12.h> 
#include <openssl/pem.h> 



int main() 
{ 
    //Setup OpenSSL.. 
    SSL_library_init(); 
    OPENSSL_add_all_algorithms_noconf(); 
    OpenSSL_add_all_digests(); 

    //Load P12.. 
    BIO* bio = BIO_new_file("p12", "rb"); 
    PKCS12* p12 = d2i_PKCS12_bio(bio, nullptr); 
    BIO_free_all(bio); 

    EVP_PKEY* pkey = nullptr; 
    X509* certificate = nullptr; 
    PKCS12_parse(p12, "password", &pkey, &certificate, nullptr); 
    PKCS12_free(p12); 

    //Load certificate.. 
    bio = BIO_new_file("pem", "rb"); 
    X509* cert2 = PEM_read_bio_X509(bio, nullptr, nullptr, nullptr); 
    EVP_PKEY* pkey2 = PEM_read_bio_PrivateKey(bio, nullptr, nullptr, nullptr); 
    BIO_free_all(bio); 


    //Load digest.. 
    const EVP_MD* md = EVP_get_digestbyname("sha1"); 

    //Load file to sign.. 
    bio = BIO_new_file("fileToSign", "rb"); 

    //Sign the binary.. 
    PKCS7* pkcs7 = PKCS7_sign(cert2, pkey2, nullptr, bio, PKCS7_BINARY | PKCS7_DETACHED | PKCS7_STREAM); 
    PKCS7_sign_add_signer(pkcs7, certificate, pkey, md, PKCS7_BINARY | PKCS7_DETACHED | PKCS7_STREAM); 
    PKCS7_add_certificate(pkcs7, cert2); 
    PKCS7_final(pkcs7, bio, PKCS7_BINARY | PKCS7_DETACHED | PKCS7_STREAM); 
    BIO_free_all(bio); 

    //Cleanup.. 
    X509_free(cert2); 
    EVP_PKEY_free(pkey2); 
    X509_free(certificate); 
    EVP_PKEY_free(pkey); 

    //Save the signature to a file.. 
    bio = BIO_new_file("Signature", "rb"); 
    i2d_PKCS7_bio(bio, pkcs7); 
    BIO_free_all(bio); 
    PKCS7_free(pkcs7); 

    //Cleanup OpenSSL 
    EVP_cleanup(); 
    CRYPTO_cleanup_all_ex_data(); 
    return 0; 
} 

秘密鍵(p12形式)、署名者証明書、署名するファイル、署名し、DER形式で出力します。これを修正してPEM形式で出力し、 "-nodetach"のフラグとしてPKCS7_DETACHを削除することができます。

これはsha1ダイジェスト(Appleが要求したもの)を使用して署名しています。必要に応じてダイジェストを変更できます。

+0

私はあなたのコードを試してみます –

+0

私は苦労しています私は秘密鍵を読み込むことができません。これはpkcs10形式です。したがって、結果はNULLポインタになります。 –

+0

ご協力ありがとうございます@Brandon、しかし私は物事を働かせることはできません。 –

関連する問題