我正在阅读这篇文章,关于如何允许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 param可以处理什么语法。
任何人都有任何想法?我在Mac 10.6上,
由于
---------更新---------------
如果我更换“&lt;”带有“$”的字符,执行时会出现以下异常:
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)
嗯,我不明白异常告诉我哪个arg很糟糕。脚本更新如下:
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
谢谢!
答案 0 :(得分:2)
您可能没有运行Bash。 <()
称为进程替换。其他一些shell支持它,但Bourne shell不支持它。
它会创建一个匿名命名管道,因此-file
会看到一个文件名,但文件内容实际上是openssl x509
命令的输出。
您可以通过确保脚本中的第一行是:
来解决问题#!/bin/bash