2012-07-17 102 views
5

我正嘗試使用Crypt::OpenSSL::RSA模塊在Perl中對XML進行數字簽名。我正在從一個文件加載一個私鑰。私鑰是使用Java從密鑰庫生成的。Perl中的XML數字簽名

下面是我的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()的結果不同。它應該表現得如此嗎?

有沒有人能夠使用Crypt::OpenSSL::RSA來簽名XML?

編輯:

我使用Java代碼來提取私有密鑰,代碼是如下 `密鑰庫KS = KeyStore.getInstance( 「JKS」);同時使用Java和Perl

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。

首次進行數字簽名任何東西,我的數字簽名的XML不驗證在所有接收者系統

+0

或許,如果你添加一個用於生成Java私鑰'keytool'命令可能會有所幫助。 – 2012-07-17 10:14:02

+0

剛剛添加了用於生成私鑰的代碼 – qateey 2012-07-17 12:40:25

回答

1

$private_key;$rsa_priv->get_private_key_string();的結果是不同的,這是應該那樣做的?

是的,輸入是一個X509鍵,輸出是一個RSA鍵。 openssl rsa -in my_priv.key給出了相同的結果。

如果你不知道這個東西,你最好用高級庫。

+0

我曾嘗試使用XML-Sig,但它沒有與我的應用程序一起工作,產生的xml未經過身份驗證,認爲我會使用此方法來更好地理解整個過程,我對數字簽名和openssl有點新了 – qateey 2012-07-17 12:42:54

+1

@qateey和@daxim,'XML :: Sig'是*不是一個好的推薦:http://matrix.cpantesters.org/?dist=XML-Sig+ 0.22,'Net :: SAML2',另一方面:http://matrix.cpantesters.org/?dist=Net-SAML2+0.17 – Axeman 2012-07-17 13:16:32

+0

Axeman,你必須學會​​正確地閱讀彙總的自動測試報告。你應該懷疑全紅的結果!在XML-Sig的情況下,只有一個依賴項缺失。這掩蓋了DSA和PKCS#8密鑰的真正問題,但只要qateey保持RSA密鑰,該模塊就可以完美地服務。 – daxim 2012-07-17 16:11:09