Запуск keytool, ошибка с параметром -file? - PullRequest
1 голос
/ 11 марта 2011

Я читаю эту статью о том, как разрешить использование самоподписанного сертификата клиентом Android:

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,

Спасибо

--------- Обновление ---------------

Если я заменю символ «<» на «$», я получу следующее исключение при выполнении: </p>

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

Спасибо!

1 Ответ

2 голосов
/ 11 марта 2011

Возможно, вы не используете Bash.<() называется заменой процесса.Некоторые другие оболочки поддерживают его, но оболочка Bourne этого не делает.

Создает анонимный именованный канал, поэтому -file видит имя файла, но содержимое файла действительно является выводом команды openssl x509.

Вероятно, вы можете решить проблему, убедившись, что первая строка в сценарии:

#!/bin/bash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...