# 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.

# This is the system security properties file
# It should be named: ${java.home}/lib/security/java.security


#
# Providers
# See also: J2SE doc. "How to Implement a Provider for the JavaTM Cryptography Architecture"
#
# Harmony providers
security.provider.1=org.apache.harmony.security.provider.cert.DRLCertFactory
security.provider.2=org.apache.harmony.security.provider.crypto.CryptoProvider
security.provider.3=org.apache.harmony.xnet.provider.jsse.JSSEProvider
# Other Open Source providers
security.provider.4=org.bouncycastle.jce.provider.BouncyCastleProvider

#
# Class to instantiate as a default Configuration implementation
# See specification for javax.security.auth.login.Configuration class.
#
login.configuration.provider=org.apache.harmony.auth.login.DefaultConfiguration


#
# Flag to enable/disable append/overwrite this properties file by the 
# extra properties file passed on the command line with
# -Djava.security.properties=<file|url> or -Djava.security.properties==<file|url>
# Possible values: true/false.
#
security.allowCustomPropertiesFile=true


# Class to instantiate as the default system Policy.
# The class should be available via bootclasspath.
# See specification for java.security.Policy class.
policy.provider=org.apache.harmony.security.fortress.DefaultPolicy


# The default is to have a single system-wide policy file,
# and an optional policy file in the user's home directory.
# It is possible to specify any number of policy files, via policy.url.n keys.
# See also: "JavaTM 2 Platform Security Architecture.", chapter 3. Permissions and Security Policy
policy.url.1=file:/${java.home}/lib/security/java.policy
policy.url.2=file:/${user.home}/.java.policy


# Flag to enable/disable properties expansion (${...}) in policy files. 
# Possible values: true/false.
# See also: "JavaTM 2 Platform Security Architecture.", chapter 3. Permissions and Security Policy
policy.expandProperties=true


# Flag to enable/disable an extra policy to be passed on the command line
# with -Djava.security.policy=<file|url>. Possible values: true/false.
# See also: "JavaTM 2 Platform Security Architecture.", chapter 3. Permissions and Security Policy
policy.allowSystemProperty=true


# A comma-separated list of package prefixes that require 
# extra protection at ClassLoader's level. 
# See java/lang/SecurityManager#checkPackageAccess for more details.
package.access=org.apache.harmony.security.fortress.,com.intel.fortress.,com.ibm.oti.


# Class to instantiate as default JGSS manager.
jgss.spi.manager=


# The default SSLSocketFactory and SSLServerSocketFactory provider implementations.
# See specification for 
# javax/net/ssl/SSLSocketFactory.html#getDefault()
# javax/net/ssl/SSLServerSocketFactory.html#getDefault()
ssl.SocketFactory.provider=org.apache.harmony.xnet.provider.jsse.SSLSocketFactoryImpl
ssl.ServerSocketFactory.provider=org.apache.harmony.xnet.provider.jsse.SSLServerSocketFactoryImpl


# Default KeyStore type.
# See specification for java/security/KeyStore.html#getDefaultType()
keystore.type=BKS


# Default KeyManagerFactory and TrustManagerFactory algorithms. 
# See specification for
# javax/net/ssl/KeyManagerFactory.html#getDefaultAlgorithm()
# javax/net/ssl/TrustManagerFactory.html#getDefaultAlgorithm()
ssl.KeyManagerFactory.algorithm=X509
ssl.TrustManagerFactory.algorithm=X509

# system.scope is used to specify implementation class of IdentityScope
# this class should can be loaded by boot classloader
system.scope=org.apache.harmony.security.SystemScope
