ラベル OpenSSL の投稿を表示しています。 すべての投稿を表示
ラベル OpenSSL の投稿を表示しています。 すべての投稿を表示

2012年7月10日火曜日

OpenSSLを使ったファイルハッシュ計算方法

openssl.exeを使った方法と、C++でライブラリを呼び出して計算してみる2パターンをメモ。

【SHA1の場合】
openssl.exe sha1 [ファイル名]

Visual Studioを使ったC++(コンソールアプリ)のサンプルは下記のような感じになります。
サンプルではWindows8 RP版のisoイメージのファイルハッシュを計算してテストしてみました。
#include "stdafx.h"
#include "Hash.h" // OpenSSLのinclude

#define TARGET_FILE "E:\\Windows8-ReleasePreview-32bit-Japanese.iso"
#define BUFSIZE (1024 * 16) // OpenSSLの定義と同じ

int _tmain(int argc, _TCHAR* argv[])
{
    unsigned char sha1hash[SHA_DIGEST_LENGTH] = { 0 };
    unsigned char buf[BUFSIZE];
    DWORD dwStart = 0;
    DWORD dwEnd = 0;

    // SHA1 using OpneSSL lib
    printf("Calculate file hash for sha1\n");
    dwStart = ::GetTickCount();
    SHA_CTX ctx;
    SHA1_Init(&ctx);
    CFile file(TARGET_FILE, CFile::modeRead);
    UINT nRead = 0;

    do{
        nRead = file.Read(buf, BUFSIZE);
        if(nRead > 0){
            SHA1_Update(&ctx, buf, nRead);
        }
    }while(nRead == BUFSIZE);
 
    SHA1_Final(sha1hash, &ctx);
    dwEnd = ::GetTickCount() - dwStart;

    printf("SHA1(%s)= ", TARGET_FILE);
    for(int i = 0; i < SHA_DIGEST_LENGTH; i++){
        printf("%.2x",sha1hash[i]);
    }
    printf("\n");
    printf("Elapsed Time(ms) = %d\n", dwEnd);

    return 0;
}
※OpenSSLライブラリとは、stdafx.hで下記のように書くか、設定画面でリンクの設定をしてください。
// OpenSSL lib
#pragma comment(lib, "openssl/lib/libeay32.lib")
#pragma comment(lib, "openssl/lib/ssleay32.lib")

【MD5の場合】
openssl.exe md5 [ファイル名]

ソースの方はMD5_~に変わるだけで、あとは全く同じなので省略します。

2012年4月10日火曜日

OpenSSLでの証明書関連コマンドメモ

何回やっても覚えられないので・・・。自分用にまとめておきます。
IISで作成したCSRを署名したい場合は、CAによる署名を行った後、
DERに変換してやれば良いです。

・秘密鍵の作成
openssl genrsa -out keyfile.pem 2048

・CSRの作成
openssl req -new -key keyfile.pem -out csrfile.pem

・自己署名
openssl x509 -req -in csrfile.pem -signkey keyfile.pem -out certfile.pem

・CAによる署名
openssl ca -out certfile.pem -infiles csrfile.pem

・CAによる失効
openssl ca -revoke certfile.pem

・CRL発行
openssl ca -gencrl -out crl.pem

・CRL変換
openssl crl -in crl.pem -outform DER -out crl.der

・PEM->DER
openssl x509 -in file.pem -outform DER -out file.der

・DER->PEM
openssl x509 -inform DER -in file.der -outform PEM -out file.pem

・PKCS#12作成
openssl pkcs12 -export -in certfile.pem -inkey keyfile.pem -certfile rootca.pem -out file.p12

・PKCS#12作成(CAチェーンつき) ca.pem内に複数証明書を入れておく
openssl pkcs12 -export -in certfile.pem -inkey keyfile.pem -chain -CAfile ca.pem -out file.p12

・PKCS#12から秘密鍵のみ取り出す(暗号化の必要なければ-nodesをつける)
openssl pkcs12 -in input.pfx -nocerts -out output_key.pem

・PKCS#12からサーバー証明書のみ取り出す
openssl pkcs12 -in input.pfx -clcerts -nokeys -out output_crt.pem

・RSA秘密鍵のパスフレーズ削除
openssl rsa -in server.key -out server.key

※ファイル名は適当ですので読み替えてください