【问题标题】:Running keytool, getting an error with the -file param?运行 keytool,使用 -file 参数时出现错误?
【发布时间】:2011-03-11 05:22:13
【问题描述】:

我正在阅读这篇关于如何允许 Android 客户端使用自签名证书的文章:

http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html#comment-form

在第 2 步中,我必须运行一些命令,但我对 shell 不太熟悉,并且在尝试运行以下命令时遇到语法错误:

export CLASSPATH="/Users/me/Desktop/lib/java/bouncycastle/bcprov-jdk16-145.jar"
CERTSTORE=res/raw/mystore.bks
if [ -a $CERTSTORE ]; then
    rm $CERTSTORE || exit 1
fi
keytool \
  -import \
  -v \
  -trustcacerts \
  -alias 0 \
  -file <(openssl x509 -in mycert.pem) \
  -keystore $CERTSTORE \
  -storetype BKS \
  -provider org.bouncycastle.jce.provider.BouncyCastleProvider \
  -providerpath /usr/share/java/bcprov.jar \
  -storepass mypassword

我运行时遇到的错误:

./test.sh: line 11: syntax error near unexpected token `('
./test.sh: line 11: `  -file <(openssl x509 -in mycert.pem) \'

所以 -file 语法是有问题的,但我不确定要改成什么,因为我不知道 -file 参数可以处理什么语法。

有人知道吗?我在 mac 10.6 上,

谢谢

--------- 更新----------------

如果我将“

java.lang.RuntimeException: Usage error, CERTIFICATE----- is not a legal command
  at sun.security.tools.KeyTool.parseArgs(KeyTool.java:375)
  at sun.security.tools.KeyTool.run(KeyTool.java:171)
  at sun.security.tools.KeyTool.main(KeyTool.java:166)

嗯,我不明白异常告诉我哪个参数不好。脚本更新如下:

export CLASSPATH="/Users/me/Desktop/lib/java/bouncycastle/bcprov-jdk16-145.jar"
CERTSTORE=res/raw/mystore.bks
if [ -a $CERTSTORE ]; then
  rm $CERTSTORE || exit 1
fi
keytool \
  -import \
  -v \
  -trustcacerts \
  -alias 0 \
  -file $(openssl x509 -in mycert.pem) \
  -keystore $CERTSTORE \
  -storetype BKS \
  -provider org.bouncycastle.jce.provider.BouncyCastleProvider \
  -providerpath /usr/share/java/bcprov.jar \
  -storepass mypassword

谢谢!

【问题讨论】:

  • 美元符号行不通。这会将openssl 命令的输出放在命令行上,因此它正在尝试执行文本。

标签: bash shell keytool


【解决方案1】:

您可能没有运行 Bash。 &lt;() 称为进程替换。其他一些 shell 支持它,但 Bourne shell 不支持。

它创建了一个匿名命名管道,因此-file 看到了一个文件名,但文件内容实际上是openssl x509 命令的输出。

您可以通过确保脚本中的第一行是:

#!/bin/bash

【讨论】:

  • 啊嗯 - 我只是通过我的 Mac 上的控制台运行它。我在脚本顶部添加了 #!/bin/bash 语句,但尝试运行它时出现同样的错误 (sh ./test.sh)
  • @user291701:不,如果你这样运行它,Bourne shell 正在运行它。像这样运行它:bash ./test.sh 或使其可执行(chmod +x test.sh)并像这样运行它:./test.sh
  • 啊,像“bash ./test.sh”一样运行它真棒让它正确执行(我得到一个与充气城堡罐子相关的类未找到异常,但这可能是因为我没有设置它在类路径中正确)。谢谢!
  • @user291701:很高兴你取得了进展。感谢您接受我的回答。不要忘记,您还可以投票赞成您接受的答案以及任何其他答案或问题(在您投票 privileges 的网站上的任何地方),您认为出于任何原因都很好(也可以进行投票)。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 1970-01-01
相关资源
最近更新 更多