Chrisc,
새로운 공급자를 추가 후속하려면, 당신은 어디서나 파일을 추가 할 수 있습니다 당신은 응용 프로그램 내 포함합니다. Android에는 여러 패키지가 이미 등록되어 있습니다. 예를 들어, 달빅에서/libcore/보안/SRC/메인/자바/자바/보안/Security.java
// Register default providers
private static void registerDefaultProviders() {
secprops.put("security.provider.1", "org.apache.harmony.security.provider.cert.DRLCertFactory"); //$NON-NLS-1$ //$NON-NLS-2$
secprops.put("security.provider.2", "org.apache.harmony.security.provider.crypto.CryptoProvider"); //$NON-NLS-1$ //$NON-NLS-2$
secprops.put("security.provider.3", "org.apache.harmony.xnet.provider.jsse.JSSEProvider"); //$NON-NLS-1$ //$NON-NLS-2$
secprops.put("security.provider.4", "org.bouncycastle.jce.provider.BouncyCastleProvider"); //$NON-NLS-1$ //$NON-NLS-2$
}
또한 중복 libcore/보안/SRC/메인/자바/자바/보안/보안이다. 속성
그러나 동일한 패키지에 클래스를 추가하더라도 기존 공급자에는 영향을 미치지 않습니다. 이 경우 JSSEProvider와 같은 Provider 클래스가 다양한 알고리즘 구현을 제공하는 데 사용되는 클래스를 정의하기 때문입니다 (위의 내용을 참조하십시오)
경우에 따라 새 SSLContext 구현 . JSSEProvider에서 SSLContextImpl을 등록하여 SSLContext의 "TLS"(일명 SSL) 구현을 제공합니다. put ("SSLContext.TLS", SSLContextImpl.class.getName());
대체 구현을 등록하는 자체 공급자를 추가 할 수 있습니다.
Security.java 또는 security.properties에 공급자를 추가 할 필요는 없지만 Security.addProvider를 사용하여 새 값을 추가하거나 Security.insertProviderAt를 사용하여 공급자가 우선 순위에 따라 표시 될 위치를 제어 할 수 있습니다 .
자신의 공급자를 등록한 후에는 SSLContext.getInstance ("SSLContext", "your-provider-name")를 사용하여 새 공급자에서 인스턴스를 확보 할 수 있습니다. SSLContext.getInstance ("SSLContext")를 호출하는 모든 프로그램이 새로운 구현을 얻습니다.
SSLSocket 's는 SSLSocketFactory.getDefault()로 생성 할 수도 있습니다.SSLSocketFactory를 ssl.SocketFactory.provider = org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl (SSLSocketFactory.getDefault 참조)와 함께 사용하려면 재정의 할 수 있습니다. 새 공급자를 추가하는 것과는 달리, 응용 프로그램 내에서이 작업을 수행 할 수 있는지 확신 할 수 없습니다.
마지막으로 C++ 코드까지 자신 만의 고유 한 JNI 코드를 제공 할 수 있습니다. 앱에서 그냥하고있는 경우 다른 JNI 코드처럼 등록 (또는 자동로드)하지만 대부분의 경우 기본 제공 코드로 작업하므로 이에 대한 자세한 내용은 알지 못합니다. 대부분의 네이티브 코드와 마찬가지로 현재 코드와 같이 VM에 코드를 작성하는 경우 심볼 이름 충돌을 피할 필요가 있습니다. 우리는 그러한 문제를 피하기 위해 파일에 정적으로 범위가 지정된 많은 코드를 작성하려고합니다. 그러나 libssl.so 자체의 다른 버전을 제공하는 것은 완전히 다른 문제입니다. 이런 식으로해야 할 일이 있다면 테스트 된 장치가 없습니다.
당신은 배경 새로운 공급자를 추가뿐만 아니라 유용이 후속 문서를 찾을 수 있습니다 : 어떻게 자바 (Java ™) 암호화의 공급자를 구현하는 아키텍처를 http://download-llnw.oracle.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html
BTW -bri
, 어디 당신이를 보았다 System.loadLibrary()로로드 된 코드에만 JNI가 작동한다고 설명되어 있습니까? 즉, dlopen()으로로드 된 코드 (System.loadLibrary()로로드 된 * 코드에서 dlopen()이 호출 됨)가 표시됩니다.이 코드는 내가 본 것으로 생각하는 것과 일치하지만, 그것이 짝수인지 의도적이며 문서화 됨 – tml