我正在尝试为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地址生成,则无效。
如何生成有效的私钥?
答案 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)