0

我需要private.der从我的 JApplet 读取证书文件 ( ) 以创建 RSA 的 PrivateKey,但我收到错误消息

access denied ("java.io.FilePermission" "private.der" "read")

我了解到 JApplet 在沙箱中运行,只要未分配就无法访问文件。如果我错了,请纠正我。

我签署了它并且它有效:

keytool -genkey -keyalg rsa -alias myKeyName
keytool -export -alias myKeyName -file myCertName.crt

jarsigner "RSA.jar" myKeyName

但我仍然收到错误FilePermission错误。

Java 代码

File f = new File("private.der");
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int) f.length()];
dis.readFully(keyBytes);
dis.close();

PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
PrivateKey key = kf.generatePrivate(spec);

如果有禁用谷歌浏览器沙箱的标志/参数,请给我。--allow-file-access-from-files --disable-web-security由于同源策略,我无论如何都在测试。

4

2 回答 2

1

签署小程序仅用于:

a) 确定提供者(通常最好使用 CA 的证书)。

b) 确保内容未被他人修改。

它本身不提供安全权限。您需要在安全策略文件中授予某人签名的小程序所需的权限。

这个链接有点旧,但很好地解释了这个过程。http://www.pawlan.com/monica/articles/signedapps/

对于此类问题,Oracle 参考指向 Java Web Start 应用程序而不是小程序,因此您可以探索它。 http://docs.oracle.com/javase/tutorial/deployment/applet/security.html

哦,顺便说一下,所有这些检查都是 JVM 内部的,所以我怀疑是否有任何标志/配置可以在浏览器中禁用它。

于 2013-08-15T19:07:32.680 回答
0

要从文件中读取,您可以执行以下操作:

byte[] keyBytes = (byte[]) AccessController.doPrivileged(new PrivilegedAction<Object>() {
    public Object run() {
        try {
            File f = new File("<path>\\private.der");
            FileInputStream fis = new FileInputStream(f);
            DataInputStream dis = new DataInputStream(fis);
            byte[] keyBytes = new byte[(int) f.length()];
            dis.readFully(keyBytes);
            dis.close();

            return keyBytes;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
});

然后您可以读取文件并将内容作为字节数组获取

于 2013-08-15T20:25:24.720 回答