# rntpc_react-native-ssl-pinning **Repository Path**: openharmony-sig/rntpc_react-native-ssl-pinning ## Basic Information - **Project Name**: rntpc_react-native-ssl-pinning - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: https://gitee.com/openharmony-sig/rntpc_react-native-ssl-pinning - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-10-14 - **Last Updated**: 2025-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🚨 **重要提示 | IMPORTANT** > > **⚠️ 此代码仓已归档。新地址请访问 [rntpc_react-native-ssl-pinning](https://gitcode.com/openharmony-sig/rntpc_react-native-ssl-pinning)。| ⚠️ This repository has been archived. For the new address, please visit [rntpc_react-native-ssl-pinning](https://gitcode.com/openharmony-sig/rntpc_react-native-ssl-pinning).** > --- > # react-native-ssl-pinning React-Native ssl pinning & public key pinning using OkHttp 3 in Android, and AFNetworking on iOS. ## NOTES: - for RN 0.60.0 or later use `react-native-ssl-pinning@latest` ## Getting started `$ npm install react-native-ssl-pinning --save` ### Mostly automatic installation > If you are using `React Native 0.60.+` [the link should happen automatically](https://github.com/react-native-community/cli/blob/master/docs/autolinking.md). in iOS run pod install `$ react-native link react-native-ssl-pinning` ### Manual installation #### iOS 1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]` 2. Go to `node_modules` ➜ `react-native-ssl-pinning` and add `RNSslPinning.xcodeproj` 3. In XCode, in the project navigator, select your project. Add `libRNSslPinning.a` to your project's `Build Phases` ➜ `Link Binary With Libraries` 4. Run your project (`Cmd+R`)< #### Android Add maven { url "https://jitpack.io" } to project level build.gradle like this: ``` allprojects { repositories { maven { url "https://jitpack.io" } } } ``` 1. Open up `android/app/src/main/java/[...]/MainActivity.java` - Add `import com.toyberman.RNSslPinningPackage;` to the imports at the top of the file - Add `new RNSslPinningPackage()` to the list returned by the `getPackages()` method 2. Append the following lines to `android/settings.gradle`: ``` include ':react-native-ssl-pinning' project(':react-native-ssl-pinning').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-ssl-pinning/android') ``` 3. Insert the following lines inside the dependencies block in `android/app/build.gradle`: ``` compile project(':react-native-ssl-pinning') ``` ## Usage #### Create the certificates: 1. openssl s_client -showcerts -servername google.com -connect google.com:443 { console.log(`response received ${response}`) }) .catch(err => { console.log(`error: ${err}`) }) ``` ### Public Key Pinning ```javascript import {fetch} from 'react-native-ssl-pinning'; fetch("https://publicobject.com", { method: "GET" , timeoutInterval: 10000, // milliseconds // your certificates array (needed only in android) ios will pick it automatically pkPinning: true, sslPinning: { certs: ["sha256//r8udi/Mxd6pLO7y7hZyUMWq8YnFnIWXCqeHsTDRqy8=", "sha256/YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=", "sha256/Vjs8r4z+80wjNcr1YKepWQboSIRi63WsWXhIMN+eWys=" ] }, headers: { Accept: "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*", "e_platform": "mobile", } }) ``` ### Disable Pinning ```javascript fetch("https://publicobject.com", { method: "GET" , timeoutInterval: 10000, // milliseconds disableAllSecurity: true, headers: { Accept: "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*", "e_platform": "mobile", } }) ``` ### Case Sensitive Headers ```javascript fetch("https://publicobject.com", { method: "GET" , timeoutInterval: 10000, // milliseconds caseSensitiveHeaders: true, //in case you want headers to be case Sensitive headers: { Accept: "application/json; charset=utf-8", "Access-Control-Allow-Origin": "*", "e_platform": "mobile", SOAPAction: "testAction", } }) ``` ### Cookies Handling ```javascript import {removeCookieByName} from 'react-native-ssl-pinning'; removeCookieByName('cookieName') .then(res =>{ console.log('removeCookieByName'); }) getCookies('domain') .then(cookies => { // do what you need with your cookies }) ``` ## Multipart request (FormData) ```javascript let formData = new FormData() #You could add a key/value pair to this using #FormData.append: formData.append('username', 'Chris'); # Adding a file to the request formData.append('file', { name: encodeURIComponent(response.fileName), fileName: encodeURIComponent(response.fileName), type: this._extractFileType(response.fileName), uri: response.uri }) fetch(url, { method: "POST" , timeoutInterval: communication_timeout, // milliseconds body: { formData: request, }, sslPinning: { certs: ["cert1","cert2"] }, headers: { accept: 'application/json, text/plain, /', } }) don't add 'content-type': 'multipart/form-data; charset=UTF-8', Setting the Content-Type header manually means it's missing the boundary parameter. Remove that header and allow fetch to generate the full content type. ``` ## License This project is licensed under the terms of the MIT license.