Tôi đang đọc về ghim chứng chỉ trên Android và tôi bị nhầm lẫn. Tôi không sử dụng okhttp hoặc trang bị thêm vì vậy tôi phải làm điều đó theo cách thủ công. Có một hướng dẫn tại đây: https://www.owasp.org/index.php/Certificate_and_Public_Key_Pinning#Android nơi họ thêm chứng chỉ vào danh sách chứng chỉ đáng tin cậy. Nhưng cũng có một hướng dẫn khác khi chúng tôi kiểm tra base64 của sha256 của chứng chỉ được cài đặt trên máy chủ: https://medium.com/@appmattus/android-security-ssl-pinning-1db8acb6621e Cách tiếp cận nào là đúng? Tại sao chúng ta không thể nhận sha256 từ máy chủ trong tiêu đề khi trình duyệt thực hiện và lưu trữ ở đâu đó?Chứng chỉ ghim trên Android với Robospice
7
A
Trả lời
0
Tôi muốn giới thiệu này
https://www.paypal-engineering.com/2015/10/14/key-pinning-in-mobile-applications/
Android Phương pháp
Phương pháp đơn giản nhất là sử dụng một phương pháp JSEE dựa trên như hình dưới đây. Đây là phương pháp được đề xuất cho Android. Đối số đầu vào của phương thức là kết nối HTTPS và một tập hợp các chân hợp lệ cho URL được nhắm mục tiêu.
private boolean validatePinning(HttpsURLConnection conn, Set<String> validPins) {
try {
Certificate[] certs = conn.getServerCertificates();
MessageDigest md = MessageDigest.getInstance("SHA-256");
for (Certificate cert : certs) {
X509Certificate x509Certificate = (X509Certificate) cert;
byte[] key = x509Certificate.getPublicKey().getEncoded();
md.update(key, 0, key.length);
byte[] hashBytes = md.digest();
StringBuffer hexHash = new StringBuffer();
for (int i = 0; i < hashBytes.length; i++) {
int k = 0xFF & hashBytes[i];
String tmp = (k<16)? "0" : "";
tmp += Integer.toHexString(0xFF & hashBytes[i]);
hexHash.append(tmp);
}
if (validPins.contains(hexHash.toString())) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
Các chân được khai báo là chuỗi. Ví dụ:
Tuyên bố chính Pins
private static final Set<String> PINS = new HashSet<String>(Arrays.asList(
new String[]{
"996b510ce2380da9c738...87cb13c9ec409941",
"ba47e83b1ccf0939bb40d2...edf856ba892c06481a"}));
Tận dụng các phương pháp trên, đây là một ví dụ cho thấy cách này có thể được đưa vào sử dụng. Phần có liên quan duy nhất được đánh dấu bên dưới.
Ví dụ Sử dụng chính Ghim cho
protected String doInBackground(String... urls) {
try {
/** Test pinning given the target URL **/
/** for now use pre-defined endpoint URL instead or urls[0] **/
Log.i(LOG_TAG, "==> PinningTestTask launched.");
String dest = defaultEndpoint;
URL targetURL = new URL(dest);
HttpsURLConnection targetConnection = (HttpsURLConnection) targetURL.openConnection();
targetConnection.connect();
if (validatePinning(targetConnection, PINS)) {
final String updateText = "Key pinning succeded for: " + dest;
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(updateText);
}
});
} else {
final String updateText = "Key pinning failed for: " + dest;
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(updateText);
}
});
}
} catch (Exception e) {
e.printStackTrace();
final String updateText = "Key pinning failed for: " + dest + "\n" + e.toString();
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText(updateText);
}
});
}
return null;
}
Các vấn đề liên quan
- 1. Chứng chỉ ghim không hoạt động với OkHttp trên Android
- 2. Ghim chứng chỉ động
- 3. .Net SqlConnection, Xác thực Máy chủ và Ghim Chứng chỉ
- 4. Tạo SSL-Socket trên Android với chứng chỉ tự ký
- 5. Ghim SSL trên iOS
- 6. RoboSpice duy trì mảng JSON với OrmLite
- 7. Tạo chứng chỉ ứng dụng khách trên thiết bị Android
- 8. android webview với chứng chỉ ứng dụng khách
- 9. Cách ký APK với nhiều chứng chỉ?
- 10. Lỗi IE8 với Chứng chỉ
- 11. WebView với Chứng chỉ ứng dụng khách SSL trên Android 4 ICS
- 12. Thực hiện Ghim và Thu phóng trên SurfaceView của Android
- 13. Mã hóa với chứng chỉ
- 14. Nhiều chứng chỉ với HttpClient
- 15. Powershell Remoting với chứng chỉ
- 16. Tạo chứng chỉ OpenSSL trên Windows
- 17. OpenSSL chứng chỉ xác minh trên Linux
- 18. Đọc chứng chỉ X.509 với Java
- 19. Hoạt động ghim Android khi khởi động
- 20. Chứng chỉ khóa trong các cuộc gọi Ajax
- 21. Kết nối TLS của Android và chứng chỉ tự ký
- 22. Certificate ghim trong Xcode
- 23. Cách đọc chứng chỉ từ kho chứng chỉ của tôi?
- 24. Sử dụng System.Net.WebClient với chứng chỉ HTTPS
- 25. egit với chứng chỉ tự ký, https
- 26. Chứng chỉ tự ký với SAML 2.0
- 27. xác minh chứng chỉ máy chủ đối với tổ chức phát hành chứng chỉ tự ký
- 28. Chứng chỉ RapidSSL không đáng tin cậy trên máy tính bảng Android
- 29. tạo chứng chỉ tsa (timestamping) với openssl - thêm một extendKeyUsage trong chứng chỉ
- 30. Sử dụng Trình quản lý Chứng chỉ AWS (Chứng chỉ ACM) với Cây đậu Đàn hồi
Theo https://medium.com/@appmattus/android-security-ssl-pinning-1db8acb6621e phương pháp này là không hiệu quả: 'Một giải pháp thanh lịch hơn là đặt chuyển tiếp bằng PayPal trong Key Pinning trong các ứng dụng di động tuy nhiên điều này bị lỗ hổng bảo mật được thảo luận trong một kỳ thi của chứng chỉ không hiệu quả Pinning triển khai. Mã được đề xuất kiểm tra các chân chống lại httpsUrlConnection.getServerCertificates() trả về danh sách các đề xuất chứng chỉ từ máy chủ và không nhất thiết phải được thiết bị tin cậy ”. – falsetto