0

我正在为我的应用程序使用 PostgreSQL 服务器。我正在尝试使用 SSL 证书实现安全连接。我在 postgresql.conf 中将 ssl 属性修改为“on”。我正在生成使用下面的 java 代码加密的自签名证书和密钥,它使用 pbe 来加密私钥。

    byte[] encodedprivkey = privKey.getEncoded();
    String MYPBEALG = "PBEWithSHA1AndDESede";
    String password = "test123";

    int count = 20;// hash iteration count
    Random random = new Random();
    byte[] salt = new byte[8];
    random.nextBytes(salt);

    PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt, count);
    PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());

    SecretKeyFactory keyFac = SecretKeyFactory.getInstance(MYPBEALG);
    SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);

    Cipher pbeCipher = Cipher.getInstance(MYPBEALG);
    // Initialize PBE Cipher with key and parameters
    pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);

    // Encrypt the encoded Private Key with the PBE key
    byte[] ciphertext = pbeCipher.doFinal(encodedprivkey);


    // Now construct  PKCS #8 EncryptedPrivateKeyInfo object
    AlgorithmParameters algparms = AlgorithmParameters.getInstance(MYPBEALG);
    algparms.init(pbeParamSpec);
    EncryptedPrivateKeyInfo encinfo = new EncryptedPrivateKeyInfo(algparms, ciphertext);

    FileOutputStream out3 = new FileOutputStream("server.key");
    out3.write(Base64.encodeBase64(encryptedPkcs8, true));
    out3.flush();
    out3.close();


    FileOutputStream out3 = new FileOutputStream("server.crt");
    out3.write(Base64.encodeBase64(chain[0].getEncoded(), true));
    out3.flush();
    out3.close();

我将服务器证书和密钥加载到数据目录中,当我启动服务器时,它把我扔到了错误之下

    FATAL:  could not load private key file "server.key": unknown pbe algorithm

请帮我解决这个问题。有没有人遇到过这个错误?任何形式的帮助将不胜感激。

4

1 回答 1

0

根据文档,可以对服务器密钥进行密码加密,但这意味着如果不手动输入密钥就无法启动 PostgreSQL。这意味着,除其他外,如果服务器进程失败,您将无法自动重新启动它,并且您无法在启动时自动启动 postgreSQL。如果这是您要求的一部分,请仔细考虑并考虑权衡以及您必须采取哪些措施来解决这些问题。

错误消息告诉您不支持用于密码保护服务器密钥的密码。选择不同的密码。

于 2013-04-23T11:24:10.693 回答