Implementation fails to enforce pinning (React Native)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 32/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- android, java, react-native
- Área
- mobile-dev, security
Línea de trabajo
Revisa MainApplication.java, useValidCertificate.js y el archivo network_security_config.xml proporcionado; primero rastrea qué ruta de red de Android gestiona el fetch y cómo se inicializa TrustKit. Reproduce el problema en Android 10 con los pins no válidos proporcionados. Se considera terminado cuando la solicitud es rechazada y la aplicación llega a InvalidCertificate, con el comportamiento verificado mediante una comprobación de regresión adecuada.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
A clear and concise description of what the bug is.
I've implemented the library as is described in the documentation, without any success in enforcing the certificate pinning.
To Reproduce
Steps to reproduce the behavior.
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">www.example.com</domain>
<pin-set>
<-- Invalid certificates -->
<pin digest="SHA-256">AAAAeJFIEmx2Y01oXXXXXXXXXXmmSFZhBXXXXXXXXXX=</pin>
<pin digest="SHA-256">CCCCxtmctlq2Y73orFOOXXXXXXXXXXZhBXXXXXXXXXX=</pin>
</pin-set>
</domain-config>
<domain-config cleartextTrafficPermitted="true">
<-- React Native config for debugging the app in Debug mode. I have tried without it and it still fails -->
<domain includeSubdomains="true">10.0.2.2</domain>
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
MainApplication.java
...
@Override
public void onCreate() {
super.onCreate();
// Using the default path - res/xml/network_security_config.xml
TrustKit.initializeWithNetworkSecurityConfiguration(this);
String serverHostname = null;
try {
URL url = new URL("https://www.example.com");
serverHostname = url.getHost();
// HttpsUrlConnection
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setSSLSocketFactory(TrustKit.getInstance().getSSLSocketFactory(serverHostname));
} catch (MalformedURLException e) {
System.err.println("MalformedURLException when declaring URL " + e);
} catch (IOException e) {
System.err.println("IOException when opening connection " + e);
}
// OkHttp 3
// OkHttpClient client = OkHttpClientProvider.createClientBuilder().sslSocketFactory(TrustKit.getInstance().getSSLSocketFactory(serverHostname),TrustKit.getInstance().getTrustManager(serverHostname)).build();
OkHttpClient client = new OkHttpClient().newBuilder().sslSocketFactory(TrustKit.getInstance().getSSLSocketFactory(serverHostname),TrustKit.getInstance().getTrustManager(serverHostname)).build();
SoLoader.init(this, /* native exopackage */ false);
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
useValidCertificate.js which is called once the Navigation screens have mounted
export default function useValidCertificate() {
useEffect(() => {
(async () => {
fetch(`https://www.example.com/account/ping`)
.then(() => {
console.log('Valid certificate, connected.');
})
.catch(() => {
resetRoot(SECURITY_SCREENS.InvalidCertificate);
});
})();
}, []);
}
Expected behavior
A clear and concise description of what you expected to happen.
The app should navigate to InvalidCertificate screen as it does when using TrustKit library for iOS.
Instead the app is behaving as if the certificate is still valid.
TrustKit configuration
Copy and paste your XML Network Security Policy.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="false">
<domain includeSubdomains="true">www.example.com</domain>
<pin-set>
<-- Invalid certificates -->
<pin digest="SHA-256">AAAAeJFIEmx2Y01oXXXXXXXXXXmmSFZhBXXXXXXXXXX=</pin>
<pin digest="SHA-256">CCCCxtmctlq2Y73orFOOXXXXXXXXXXZhBXXXXXXXXXX=</pin>
</pin-set>
</domain-config>
<domain-config cleartextTrafficPermitted="true">
<-- React Native config for debugging the app in Debug mode. I have tried without it and it still fails -->
<domain includeSubdomains="true">10.0.2.2</domain>
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
App details:
- App target SDK: 29
- App language: React Native
- Android version to reproduce the bug: Android 10
Additional context
Add any other context about the problem here.
- Lenguaje dominante
- Java
- Estrellas
- 604
- Forks
- 90
- Merge medio
- 1 h 29 min
- PR fusionados (30 d)
- 2
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de datatheorem/TrustKit-Android
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 18/100
-
React native SSL pinning works but PinningFailureReportBroadcastReceiver is not fired/called Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
datatheorem/TrustKit-Android#93 · 3 comentarios ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 30/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 20/100
datatheorem/TrustKit-Android#90 · 3 comentarios ·
Todos los issues de datatheorem/TrustKit-Android
Issues similares
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
apache/cloudstack#14222 ·
-
[BUG]茶杯方块在取茶时会引发崩溃 Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Cannot differ own consent and managed consents in My Consents view and detailed consent view. Abierto1.0.0-alpha2 Type/Improvement
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
wso2/dpdp-accelerator#272 ·
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
apache/rocketmq-dashboard#4860 · 1 comentario ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
infinispan/infinispan#18150 ·