java.io.FileNotFoundException:(不允许操作)错误与 ./keytool -import on mac osx (el capitan) - Java 6

java.io.FileNotFoundException: (Operation not permitted) error with ./keytool -import on mac osx (el capitan) - Java 6

正在尝试将 CA 证书导入我的 Java 6 信任库并 运行 出现此错误:

./keytool -v -import -trustcacerts -alias Rapidssl -file /Users/spurr/Desktop/rapidssl.cer -keystore /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
Enter keystore password:
Certificate was added to keystore
[Storing /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts]
keytool error: java.io.FileNotFoundException: /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts (Operation not permitted)
java.io.FileNotFoundException: /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts (Operation not permitted)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
at java.io.FileOutputStream.<init>(FileOutputStream.java:84)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:902)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)

我也是 运行 该命令的 root 用户,所以我认为我可以访问该 cacerts 密钥库位置。使用 Java 6.

当异常状态为 (Operation not permitted) -

时,这似乎是一个 mac 特定问题

对于遇到此问题的任何其他人,您需要重新启动 mac 并在启动时按 ⌘+R。然后进入 Utilities > Terminal 并输入以下命令:

csrutil disable
reboot

之后您应该能够将 cacerts 导入您的 Java 密钥库。导入该 cacert 后,不要忘记重新启用 csrutil。重启,开机时按 ⌘+R,Utilities > Terminal,输入:

csrutil enable
reboot

我 运行 对 .metadata 目录下的文件感兴趣,因为我将 Eclipse 工作区放在 Documents 下。通过进入“系统偏好设置”->“隐私”并为 Eclipse 添加对特定文件和文件夹的访问权限或授予 Eclipse 全磁盘访问权限来解决此问题。

我在 MacOS Big Sur 上启动 jnlp 文件时遇到了类似的问题:

CouldNotLoadArgumentException[ Could not load file/URL specified: /Users/jhartman/Documents/Favorities/NCC/NCC 123.jnlp]
....
Caused by: java.io.FileNotFoundException: /Users/jhartman/Documents/Favorities/NCC/NCC 123.jnlp (Operation not permitted)

解决方案是:

  • 授予 Java (/usr/bin/java) 完整磁盘 访问权限
  • 授予 Java (/usr/bin/java) 文件和文件夹 访问下载、文档和文件夹的权限

步数

  1. 在 Finder 中打开 /usr/bin,例如通过从终端调用:
jhartman@MBP ~ % open /usr/bin
  1. 本地化 java(和 keytool

  2. 打开系统偏好设置安全与隐私。打开 Full Disk Access 选项卡并授权

  3. 从第 1 步打开的 Finder window 中拖动 javakeytool 并放到 Full Disk Access[= 中的应用程序列表中62=]

  1. 转到安全和隐私 -> 文件和文件夹,勾选java和[的下载文件夹和文档文件夹=16=]

这是我的问题的解决方案,但我希望它也能解决 keytool 问题。