[英]How generate a valid private (RSA 1024) key for a tor onion service using java?
我正在嘗試為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地址生成,則不起作用。
如何生成有效的私鑰?
解決方案:使用BEGIN PRIVATE KEY
更改BEGIN RSA 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-----
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.