#!/bin/sh
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to you under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

## Generate temporary proxyserver for use with JMeter Proxy recorder
## Usage:  sh proxycert.sh [validity(default 1)]
## e.g. sh proxyxcert.sh 7

KEYSTORE=proxyserver.jks
if [ -r ${KEYSTORE} ]
then
    echo "${KEYSTORE} exists; please rename or delete it before creating a replacement"
    exit 1
fi

DNAME="cn=JMeter Proxy (DO NOT TRUST)"
VALIDITY=${1:-1}
# Must agree with property proxy.cert.keystorepass
STOREPASSWORD=password
# Must agree with proxy.cert.keypassword
KEYPASSWORD=password

## generate the keystore with the certificate
keytool -genkeypair -alias jmeter -keystore ${KEYSTORE} -keypass ${KEYPASSWORD} -storepass ${STOREPASSWORD} -validity "${VALIDITY}" -keyalg RSA -dname "${DNAME}"

## show the contents
keytool -list -v -keystore ${KEYSTORE} -storepass ${STOREPASSWORD}
