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

docsによると、サーバーキーのパスフレーズ暗号化は可能ですが、手動でキーを入力しないと PostgreSQL を起動できないことを意味します。これは、とりわけ、サーバー プロセスが失敗した場合に自動的に再起動できず、ブート時に postgreSQL を自動的に開始できないことを意味します。これが要件の一部である場合は、慎重に検討し、トレードオフと、これらの問題に対処するために何をしなければならないかを検討してください。

エラー メッセージは、サーバー キーをパスフレーズで保護するために使用される暗号がサポートされていないことを示しています。別のサイファーを選択してください。

于 2013-04-23T11:24:10.693 に答える