React native ssl pinning và cách triển khai chứng chỉ SSL trong React native ssl pinning

1. Ưu điểm của SSL Pinning

Nếu được triển khai đúng cách, ghim SSL sẽ bổ sung các ưu điểm sau cho ứng dụng di động:

  • Hạn chế đáng kể việc bị tấn công mạng
  • Đã thêm bảo mật chống lại các chứng chỉ độc hại được sử dụng bởi tin tặc
  • Đã thêm bảo vệ chống lại các lỗi của Tổ chức phát hành chứng chỉ, giả mạo hoặc Tổ chức phát hành chứng chỉ bị xâm phạm
  • Đã thêm bảo mật chống lại phần mềm độc hại không có đặc quyền trong thiết bị
  • Giảm chi phí vì chúng có thể sử dụng chứng chỉ tự ký
  • Nâng cao quyền riêng tư của người dùng

2. Nhược điểm của ghim SSL

Dưới đây là một số nhược điểm của SSL Pinning:

  • Ít linh hoạt – do không dễ thay đổi chứng chỉ đã ghim
  • Không giống như bảo mật chuyển tiếp hoàn hảo, SSL Pinning không bảo vệ khi key của chứng chỉ được ghim bị xâm phạm
  • Không giống như TSL, SSL Pinning không bảo vệ dữ liệu khi truyền qua mạng. Do đó, SSL Pinning không cung cấp tính bảo mật và bảo vệ toàn vẹn đối với các nút mạng không đáng tin cậy trong quá trình liên lạc
  • Không bảo vệ chống lại kỹ thuật đảo ngược.
  • Không bảo vệ cho thiết bị đã root.

3. Những thứ cần chuẩn bị?

  • Kiến thức cơ bản về React Native
  • Node 12 hoặc mới hơn — tốt nhất là LTS. Lưu ý, tốt nhất là cài đặt Node bằng NVM để tránh lỗi khi thiết lập môi trường phát triển React Native của bạn
  • Phiên bản Android Studio mới nhất
  • Bộ công cụ phát triển Java SE (JDK). React Native yêu cầu tối thiểu Java 8

4. cách triển khai chứng chỉ SSL trong React native ssl pinning

Trong phần này, chúng ta sẽ tìm hiểu cách triển khai ghim SSL trong ứng dụng React Native.

Đảm bảo rằng bạn đã thiết lập môi trường phát triển React Native của mình. Sao chép ứng dụng khởi động này để bắt đầu chạy:

git clone https://github.com/lawrenceagles/react-native-android-ssl-pinning-starter

Mở dự án của bạn trong trình soạn thảo và tạo một tệp trong thư mục Android. Thêm phần sau vào tệp này:local.properties

sdk.dir = /home/<!-- your pc name here -->/Android/Sdk
Từ đây, bạn có thể bắt đầu Metro bằng cách chạy và chúng tôi nhận được:npx react-native start
Tiếp theo, mở một thiết bị đầu cuối mới và chạy để chạy ứng dụng của bạn. Đảm bảo rằng bạn đã kết nối thiết bị hoặc đang chạy trình giả lập.npx react-native run-android
Nếu mọi thứ hoạt động chính xác, bạn sẽ thấy ứng dụng mới của mình đang chạy trong trình giả lập Android:

Ứng dụng dành cho người mới bắt đầu bao gồm một bản soạn sẵn đơn giản với hai nút: fetch datavà fetch secured data. Nhấp vào các nút này sẽ gọi ra hai chức năng (như bạn có thể đoán): fetchDatavà secureFetchData. Hiện tại, các chức năng này chỉ ghi một văn bản vào bảng điều khiển mà bạn có thể thấy trong thiết bị đầu cuối Metro của mình.

5. Triển khai cài đặt chứng chỉ  SSL Pining

Đầu tiên, cài đặt gói ghim react-native-ssl bằng cách chạy:

npm install react-native-ssl-pinning

Để nhận chứng chỉ, hãy mở thiết bị đầu cuối của bạn và chạy đoạn mã sau:

openssl s_client -servername jsonplaceholder.typicode.com -connect jsonplaceholder.typicode.com:443 </dev/null | sed -n -e '/-.BEGIN/,/-.END/ p' > mycert.pem  

Đoạn mã trên sẽ xuất chứng chỉ của jsonplaceholdervà lưu nó vào một tệp — . Nhưng chúng tôi cần chứng chỉ trong một tệp để chuyển đổi nó từ thành , vì vậy hãy chạy đoạn mã sau:.pemmycer.pm.cer.pem.cer

openssl x509 -in mycert.pem -outform der -out mycert.cer

Và sao chép tệp vào thư mục ứng dụng của bạn .mycert.cer/android/app/src/main/assets/

Để lấy chứng chỉ không hợp lệ, chúng tôi sẽ lấy chứng chỉ đã hết hạn từ https://expired.badssl.com/ .

Trong thiết bị đầu cuối của bạn, hãy chạy đoạn mã sau:

openssl x509 -in expcert.pem -outform der -out expcert.cer

Sau đó, thêm tệp vào thư mục của bạn.expcert.cer/android/app/src/main/assets/

Bây giờ, chúng ta có thể cấu trúc lại các chức năng fetchDatavà securedFetchDatađể sử dụng chứng chỉ này bằng cách sử dụng gói.react-native-ssl-pinning

Nhập gói này vào tệp của bạn bằng dòng mã:App.js
import { fetch } from 'react-native-ssl-pinning';

Thay thế fetchDatachức năng bằng mã này:

const fetchData = () => {
    fetch("https://jsonplaceholder.typicode.com/posts/1", {
      method: "GET",
      timeoutInterval: 10000,
      sslPinning: {
        certs: ["expcert"]
      }
    })
      .then(response => {
        console.log(JSON.stringify(response.bodyString, null, "\t"))
      })
      .catch(err => {
        console.log(`error: ${err}`)
      });
  }

Ngoài ra, thay thế securedFetchDatachức năng bằng đoạn mã sau:

const secureFetchData = () => {
    fetch("https://jsonplaceholder.typicode.com/posts/1", {
        method: "GET",
        timeoutInterval: 10000,
        sslPinning: {
            certs: ["mycert"]
        }
    })
        .then(response => {
            console.log(JSON.stringify(response.bodyString, null, "\t"))
        })
        .catch(err => {
            console.log(`error: ${err}`)
        })
}

Trong đoạn mã trên, chúng tôi đã cập nhật các hàm fetchDatavà securedFetchDatađể tìm nạp dữ liệu bằng cách sử dụng phương thức từ tệp . Phương thức này nhận một tùy chọn, là một đối tượng có thuộc tính. Thuộc tính là một mảng của tất cả các chứng chỉ của chúng tôi.jsonplaceholder.typicode.comfetchreact-native-ssl-pinningfetchsslPinningcertcert

Trong chúng fetchDatatôi đã thêm expcertchứng chỉ. Vì vậy, kết nối không nên được thiết lập. Nhưng trong securedFetchDatachức năng, chúng tôi đã thêm mycertchứng chỉ, đây là chứng chỉ đáng tin cậy, vì vậy kết nối sẽ được thiết lập. Và chúng tôi sẽ có thể lấy dữ liệu từ .jsonplaceholder.typicode.com

Để kiểm tra điều này, chúng tôi cần xây dựng lại ứng dụng của mình bằng cách chạy:

npx react-native run-android

Bây giờ bấm vào nút và kiểm tra nhà ga Metro. Chúng tôi nhận được:Fetch secured data

 

Chúng ta có thể thấy từ hình ảnh rằng dữ liệu đã được tìm nạp thành công.

Bây giờ hãy nhấp vào nút và kiểm tra nhật ký trong nhà ga Metro. Chúng tôi nhận được lỗi này: .Fetch data
LOG error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found

Lỗi này phát sinh do chúng tôi sử dụng chứng chỉ đã hết hạn. Chứng chỉ SSL hết hạn theo thời gian và điều này là vì lý do bảo mật

OK vậy là đã xong  – chúc các bạn thành công.

>>>> SSl Pinning android là gì? Cách fix SSL Pinning Android

0/5 (0 Reviews)

Leave a Comment