2011-03-11 40 views
1

我讀這篇文章有關如何允許自簽名的證書,以通過Android客戶端可以使用:運行keytool,得到一個錯誤的文件參數?

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

在步驟2中,我要運行一些命令,但我不太熟悉的外殼和我得到試圖運行以下時語法錯誤:

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) 

嗯,我不理解在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

美元符號是行不通的。這將'openssl'命令的輸出放在命令行上,以便它試圖執行文本。 – 2011-03-11 06:25:52

回答

2

您可能沒有運行Bash。 <()被稱爲進程替代。其他一些shell支持它,但Bourne shell不支持。

它創建一個匿名命名管道,因此-file看到一個文件名,但文件內容實際上是openssl x509命令的輸出。

你或許可以通過確保在腳本中的第一行是解決問題:

#!/bin/bash 
+0

嗯嗯 - 我只是通過控制檯在我的Mac上運行。我在腳本的頂部添加了#!/ bin/bash語句,但試圖運行它時出現同樣的錯誤(sh ./test.sh) – user291701 2011-03-11 06:20:23

+0

@ user291701:不,如果像這樣運行它,Bourne shell是運行它。或者像下面這樣運行:'bash。/ test.sh'或者使它可執行('chmod + x test.sh')並像這樣運行它:'。/ test.sh'。 – 2011-03-11 06:23:12

+0

啊真棒運行它像「bash ./test.sh」得到它正確執行(我得到一個類沒有發現異常與有彈性的城堡jar相關,但這可能是因爲我沒有正確設置它在classpath中)。謝謝! – user291701 2011-03-11 06:33:09

相關問題