blob: 2c37b5bc83bd2fd270389fb73f7db93c217dd9f3 [file] [log] [blame]
<!---
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.
-->
Notes on Library names
======================
If the default SSL Cryptography library is not suitable for use, it may be
necessary to override the path or name.
The way to do this depends on the OS.
On Linux/macOS, each library version is generally installed in a separate directory.
The following properties can be used to override the JNI and JNA locations respectively:
jni.library.path
jna.library.path
On Windows, multiple library versions may be installed in the system directory under a different name.
The following properties can be used to override the JNI and JNA file names respectively:
commons.crypto.OpenSslNativeJni
commons.crypto.OpenSslNativeJna
For testing with Maven, these properties can be defined on the command-line:
Linux/macOs:
$ mvn ... -Djni.library.path=/usr/local/lib -Djna.library.path=/usr/local/lib ...
Windows:
> mvn ... -D"commons.crypto.OpenSslNativeJni=libcrypto-1_1-x64" -D"commons.crypto.OpenSslNativeJna=libcrypto-1_1-x64" ...
Library override is needed on macOS
-----------------------------------
Attempts to load the default library on macOS cause the application to crash with a message of the form:
".../bin/java is loading libcrypto in an unsafe way"
To fix this, he properties jni.library.path and/or jna.library.path need to be set to the appropriate path,
for example /usr/local/lib.
An alternative is to ensure that there is a copy of the library in the application launch directory.
This can be a soft link to the actual library. This only works for unrestricted processes.
It does not appear to be possible to use any of the DYLIB_ environment variables.
These are removed as part of System Integrity Protection, so are not seen by the application and dlopen().