5

Crypt::OpenSSL::RSAモジュールを使用してPerlでXMLにデジタル署名しようとしています。ファイルから秘密鍵を読み込んでいます。秘密鍵は、Javaを使用してキーストアから生成されました。

以下は私のPerlコードです:

my $private = 'my_priv.key';
my $private_key = read_file( $private );
print "my private key text is\n", $private_key;

ここにキー全体を置くのではなく、最初の数行だけを出力します:-)

> -----BEGIN PRIVATE KEY----- MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAKAuqJ1ZkxHZStfSt0CdEsaSYuLO
> 6zDiTpt60asVLWpLe2bf...


my $rsa_priv = Crypt::OpenSSL::RSA->new_private_key($private_key);
print "my private key is\n",$rsa_priv->get_private_key_string();

出力:

> -----BEGIN RSA PRIVATE KEY-----
> MIICXAIBAAKBgQCgLqidWZMR2UrX0rdAnRLGkmLizusw4k6betGrFS1qS3tm3+97
> wMvFXCx0Od8eb

$private_keyとの結果$rsa_priv->get_private_key_string()は異なります。そのように振る舞うことになっていますか?

誰かがを使用してXMLに署名することができましたCrypt::OpenSSL::RSAか?

編集:

私はJavaコードを使用して秘密鍵を抽出しています。コードは次のとおりです。`KeyStoreks= KeyStore.getInstance(" JKS ");

keypass = sPass.toCharArray();

FileInputStream fis = new FileInputStream(store);
ks.load(fis, sPass.toCharArray());
fis.close();

String eol = System.getProperty("line.separator");

Key k = ks.getKey(alias, keypass);

System.out.println("....Generating the Private Key.....");
String encKey = new BASE64Encoder().encode(k.getEncoded());
System.out.println("Encoded Key: " + encKey);
BufferedWriter myKey = null;
myKey = new BufferedWriter(new FileWriter(alias + "_priv.key"));
myKey.write("-----BEGIN PRIVATE KEY-----" + eol);
myKey.write(encKey + eol);
myKey.write("-----END PRIVATE KEY-----");
myKey.close();
System.out.println("....Private Key Generated.....");`

私が署名しようとしているxmlはperl(それは全体の大きなシステムです)にあり、キーストアはjavaにあるため、javaとperlの両方を使用します。

初めて何かをデジタル署名し、私のデジタル署名されたxmlが受信者システムに対してまったく認証されていません

4

1 に答える 1

1

$private_key;との結果$rsa_priv->get_private_key_string();が異なりますが、これはそのように動作するはずですか?

はい、入力は X509 キーで、出力は RSA キーです。openssl rsa -in my_priv.key同じ結果が得られます。

このことについて何も知らない場合は、高レベルのライブラリを使用することをお勧めします。

于 2012-07-17T11:24:15.137 に答える