Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(202)

Unified Diff: net/data/ssl/scripts/client_authentication/run-forwarded-test-server.sh

Issue 12220104: Wire up SSL client authentication for OpenSSL/Android through the net/ stack (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/data/ssl/scripts/client_authentication/run-forwarded-test-server.sh
diff --git a/net/data/ssl/scripts/client_authentication/run-forwarded-test-server.sh b/net/data/ssl/scripts/client_authentication/run-forwarded-test-server.sh
new file mode 100755
index 0000000000000000000000000000000000000000..274eb27e54ea0019b6e20b327be8ae23a5114a28
--- /dev/null
+++ b/net/data/ssl/scripts/client_authentication/run-forwarded-test-server.sh
@@ -0,0 +1,138 @@
+#!/bin/bash
+#
+
+# Ensure script exits if commands fail.
+set -e
+
+# Scrappy script to test client certificate support on an Android device.
+PROGDIR=$(dirname "$0")
+PROGNAME=$(basename "$0")
+
+HELP=
+VERBOSE=0
+BUILDTYPE=${BUILDTYPE:-Release}
+FORWARDER_SOCKET=openssl_server_forwarder
+FORWARDER_HOST_PORT=5000
+HOST_SERVER_PORT=4433
+DEVICE_SERVER_PORT=$HOST_SERVER_PORT
+
+for OPT; do
+ case $OPT in
+ -v|--verbose)
+ VERBOSE=$(( $VERBOSE + 1 ))
+ ;;
+ -q|--quiet)
+ VERBOSE=$(( $VERBOSE - 1 ))
+ ;;
+ --help|-h|-?)
+ HELP=true
+ ;;
+ --release)
+ BUILDTYPE=Release
+ ;;
+ --debug)
+ BUILDTYPE=Debug
+ ;;
+ -*)
+ echo "ERROR: Unsupported option: $OPT, see --help for details."
+ exit 1
+ ;;
+ *)
+ echo "ERROR: This script doesn't take parameters. See --help."
+ exit 1
+ esac
+done
+
+if [ "$HELP" ]; then
+ echo "\
+Usage: $PROGNAME [options]
+
+This program is used to start a HTTPS server on your local machine, after
+setting up a reverse network redirection on an attached Android device.
+
+Start this script, then on the device, open the following URL in your
+browser:
+
+ https://localhost:$DEVICE_SERVER_PORT
+
+This shall prompt you for an installed client certificate.
+
+Valid options are:
+ --help|-h|-? Print this message.
+ --verbose Increase verbosity.
+ --quiet Decrease verbosity.
+ --release Assume BUILDTYPE=Release.
+ --debug Assume BUILDTYPE=Debug.
+ -v Same as --verbose.
+ -q Same as --quiet.
+"
+ exit 0
+fi
+
+run () {
+ if [ "$VERBOSE" -ge 1 ]; then
+ echo "COMMAND: $@"
+ fi
+ "$@"
+}
+
+# Return the PID of a given program running on the device.
+# $1: Program full path
+get_pid_of () {
+ $ADB shell ps | awk '$9 ~ "'$1'" { print $2; }'
+}
+
+CHROME_OUT=$(cd "$PROGDIR/../../../../../out" && pwd)
+echo "CHROME_OUT=$CHROME_OUT"
+if [ ! -d "$CHROME_OUT" ]; then
+ echo "ERROR: Can't find: $CHROME_OUT"
+ exit 1
+fi
+
+# Configuration defaults:
+BUILDTYPE=${BUILDTYPE:-Release}
+
+FORWARDER_SOCKET=openssl_server_forwarder
+FORWARDER_HOST_PORT=5000
+HOST_SERVER_PORT=4433
+DEVICE_SERVER_PORT=$HOST_SERVER_PORT
+
+HOST_FORWARDER=host_forwarder
+DEVICE_FORWARDER=device_forwarder
+DATA_TMP=/data/local/tmp
+
+ADB=${ADB:-adb}
+
+# Kill any existing forwarder.
+DEVICE_PID=$(get_pid_of $DATA_TMP/$DEVICE_FORWARDER)
+if [ "$DEVICE_PID" ]; then
+ echo "Killing existing device forwarder instance."
+ run adb shell kill -9 "$DEVICE_PID"
+fi
+
+# Push the forwarder to the device, and start it.
+run $ADB push $CHROME_OUT/$BUILDTYPE/$DEVICE_FORWARDER \
+ $DATA_TMP/$DEVICE_FORWARDER
+run $ADB forward tcp:$FORWARDER_HOST_PORT localabstract:$FORWARDER_SOCKET
+run $ADB shell $DATA_TMP/$DEVICE_FORWARDER $FORWARDER_SOCKET
+run sleep 1
+
+# Check that the device forwarder was started.
+if [ -z "$($ADB shell ps | grep -e $DEVICE_FORWARDER)" ]; then
+ echo "Could not start device forwarder!?"
+ exit 1
+fi
+
+# Now send a command to it to reverse-forward the server ports
+run $CHROME_OUT/$BUILDTYPE/$HOST_FORWARDER \
+ "$FORWARDER_HOST_PORT:$DEVICE_SERVER_PORT:$HOST_SERVER_PORT:127.0.0.1"
+
+# localhost:4433. The server will be accessible for www connections and
+# will require a client certificate issued by Client Auth Test Root 1.
+run openssl s_server \
+ -accept $HOST_SERVER_PORT \
+ -cert $PROGDIR/out/root_1.pem \
+ -key $PROGDIR/out/root_1.key \
+ -www \
+ -Verify 5 \
+ -CAfile $PROGDIR/out/root_1.pem

Powered by Google App Engine
This is Rietveld 408576698