如何使用java为tor洋葱服务生成有效的私有(RSA 1024)密钥?

时间:2018-04-05 11:32:16

标签: java rsa tor

我正在尝试为java中的tor洋葱服务生成有效的私钥。使用此私钥我想获得一个有效的.onion地址。

我已经运行了以下代码的各种组合(使用此位/没有该位)

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(1024);
KeyPair keyPair = keyPairGenerator.generateKeyPair();
PrivateKey privateKeyGenerated = keyPair.getPrivate();

KeyFactory keyFactory =  KeyFactory.getInstance("RSA");
PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyGenerated.getEncoded()));

Base64.Encoder encoder = Base64.getEncoder();
String privateKeyEncoded = encoder.encodeToString(privateKey.getEncoded());

String fileName = "{{where I'm wanting to store the file}}";    
Writer writer = new FileWriter(fileName);
writer.write("-----BEGIN RSA PRIVATE KEY-----\n");
writer.write(privateKeyEncoded);
writer.write("\n-----END RSA PRIVATE KEY-----\n");
writer.close();

生成后,我将密钥复制到我的 / var / lib / tor / hidden_​​service / private_key ,删除任何关联的主机名并启动tor服务。在日志中我收到错误:

TLS error: wrong tag (in asn1 encoding routines:ASN1_CHECK_TLEN:---)
TLS error: nested asn1 error (in asn1 encoding routines:ANS1_D2I_EX_PRIMITIVE:---) 
TLS error: nested asn1 error (in asn1 endoding routines:ASN1_TEMPLATE_NOEXP_D2I:---) 
TLS error: RSA lib (in rsa routines:OLD_RSA_PRIV_DECODE:---)

如果生成的.onion地址生成,则无效。

如何生成有效的私钥?

1 个答案:

答案 0 :(得分:3)

解决方案:使用BEGIN RSA PRIVATE KEY

更改BEGIN PRIVATE KEY

Java对密钥进行编码IN PKCS#8格式

PrivateKey privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(privateKeyGenerated.getEncoded()));

但是你正在生成一个PEM文件,标题-----BEGIN RSA PRIVATE KEY-----保留给PKCS#1密钥(旧格式但很常见),而.onion假设它是pkcs1,当它真的是pkcs8时。看错误

TLS error: RSA lib (in rsa routines:OLD_RSA_PRIV_DECODE:---)

所以你需要使用PCKS#8标题-----BEGIN PRIVATE KEY-----

另见这篇文章Load a RSA private key in Java (algid parse error, not a sequence)