Certificate Pinning: nó là gì, cơ chế và phương pháp cố định

Tác giả: IT Sectr Đã đăng: 2026-03-09 Thời gian đọc: 8 phút

Certificate Pinning là cÆ¡ chế cố định chứng chỉ hoặc khóa công khai cá»§a máy chá»§, trong đó ứng dụng sá»­ dụng dấu vá»n tay đã biết trước để xác thá»±c kết nối HTTPS. Khác vá»›i chuá»—i tin cậy tiêu chuẩn thông qua CA, pinning đảm bảo rằng ngay cả má»™t tổ chức chứng thá»±c bị xâm nhập cÅ©ng không thể cấp chứng chỉ giả mạo cho miá»n cá»§a bạn. Theo OWASP MSTG (2025), Certificate Pinning nằm trong danh sách các kiểm soát bắt buá»™c cho ứng dụng ở mức bảo vệ L2. Việc triển khai bao gồm lưu trữ băm chứng chỉ trong mã và xác thá»±c ở má»—i yêu cầu.

Các điểm chính

  • Certificate Pinning — kỹ thuật mà ứng dụng chỉ tin tưởng vào chứng chỉ có dấu vân tay đã biết trước, bá»� qua toàn bá»™ chuá»—i CA
  • Public Key Pinning — má»™t giải pháp thay thế chỉ cố định khóa công khai, đơn giản hóa việc luân chuyển khi thay đổi chứng chỉ
  • HPKP (HTTP Public Key Pinning) — tiêu chuẩn lá»—i thá»i ở cấp độ tiêu Ä‘á»� HTTP, không được khuyến nghị cho các dá»± án má»›i
  • Backup pins — dấu vân tay dá»± phòng đảm bảo tính liên tục cá»§a kết nối khi chứng chỉ chính thay đổi hoặc hết hạn
  • Triển khai trên iOS qua SecTrustEvaluate, trên Android qua CertificatePinner trong OkHttp hoặc TrustManager

Certificate Pinning là gì?

Certificate Pinning là má»™t kỹ thuật bảo mật mà ứng dụng lưu trữ dấu vân tay cá»§a má»™t chứng chỉ đáng tin cậy và sá»­ dụng nó như tiêu chí duy nhất để thiết lập kết nối HTTPS. Trong mô hình TLS tiêu chuẩn, máy khách xác thá»±c rằng chứng chỉ cá»§a máy chá»§ được ký bởi má»™t CA gốc đáng tin cậy — bất kỳ má»™t trong số hàng trăm tổ chức chứng thá»±c được cài đặt sẵn trong hệ thống. Certificate Pinning thay thế chuá»—i này bằng má»™t kiểm tra trá»±c tiếp: chứng chỉ phải khá»›p vá»›i mẫu đã lưu hoặc chứa khóa công khai dá»± kiến.

Vấn Ä‘á»� vá»›i mô hình tiêu chuẩn trở nên rõ ràng sau các sá»± cố xâm nhập CA — DigiNotar (2011), Comodo (2011), TrustCor (2022). Nếu má»™t CA cấp chứng chỉ giả mạo cho miá»n cá»§a bạn, trình duyệt hoặc ứng dụng sẽ chấp nhận nó là hợp lệ. Certificate Pinning ngăn chặn cuá»™c tấn công này: ngay cả má»™t chứng chỉ giả mạo được ký hoàn hảo cÅ©ng sẽ bị từ chối vì dấu vân tay cá»§a nó không khá»›p vá»›i dấu đã cố định trong ứng dụng.

Thuật ngữ pinning bắt nguồn từ pin — “chốt” hoặc “vật cố định”: nhà phát triển cố định má»™t chứng chỉ đáng tin cậy, và bất kỳ sai lệch nào khá»�i nó sẽ chặn kết nối. Theo nghiên cứu cá»§a Mitre CWE-295, việc xác thá»±c chứng chỉ không đúng cách vẫn là má»™t trong 10 lá»—i bảo mật nguy hiểm nhất trong các ứng dụng di động, và Certificate Pinning là phương pháp trá»±c tiếp để ngăn chặn nó.

Lịch sử và sự phát triển của Certificate Pinning

Ban đầu, Certificate Pinning được sá»­ dụng trong trình duyệt thông qua cÆ¡ chế HPKP (HTTP Public Key Pinning), được tiêu chuẩn hóa trong RFC 7469. Nhà phát triển gá»­i má»™t tiêu Ä‘á»� HTTP Public-Key-Pins chứa băm cá»§a các khóa dá»± kiến, và trình duyệt lưu trữ chúng trong má»™t khoảng thá»�i gian nhất định. Tuy nhiên, HPKP hóa ra nguy hiểm: chỉ má»™t lá»—i cấu hình có thể chặn má»™t trang web trong nhiá»�u tháng. Năm 2018, Chrome ngừng há»— trợ HPKP, và tiêu chuẩn hiện tại trở thành triển khai phÃa máy khách — bên trong ứng dụng di động hoặc tiện ích mở rá»™ng trình duyệt.

Certificate Pinning hoạt động như thế nào?

Quá trình Certificate Pinning bao gồm ba giai Ä‘oạn chính: tÃnh toán dấu vân tay, xác thá»±c kết nối và xá»­ lý lá»—i. Trong giai Ä‘oạn chuẩn bị, nhà phát triển lấy băm SHA-256 cá»§a chứng chỉ hoặc khóa công khai cá»§a máy chá»§ sản xuất. Ä�ối vá»›i các ứng dụng tuân thá»§ GDPR và PCI DSS, cÅ©ng cần cố định dấu vân tay cá»§a các CA trung gian trong chuá»—i.

Vá»›i má»—i yêu cầu HTTPS, ứng dụng chặn callback xác thá»±c TLS, trích xuất chứng chỉ cá»§a máy chá»§ và tÃnh toán băm SHA-256 cá»§a nó. Băm này được so sánh vá»›i danh sách các dấu vân tay đáng tin cậy đã lưu. Nếu tìm thấy sá»± khá»›p — kết nối tiếp tục. Nếu không — ứng dụng phải ngắt kết nối và báo cáo lá»—i mà không tiết lá»™ chi tiết triển khai cho kẻ tấn công.

kotlin
fun validateCertificate(certificate: X509Certificate,
    expectedHash: String): Boolean {
    val digest = MessageDigest.getInstance("SHA-256")
    val hash = Base64.encodeToString(
        digest.digest(certificate.publicKey.getEncoded()),
        Base64.DEFAULT
    ).trim()
    return hash == expectedHash
}

Hàm nhận má»™t đối tượng X509Certificate từ máy chá»§ và băm dá»± kiến. Nó đầu tiên trích xuất khóa công khai cá»§a chứng chỉ, tÃnh toán băm SHA-256 và mã hóa nó thành Base64. Kết quả được so sánh vá»›i dấu vân tay dá»± kiến. Trong môi trưá»�ng sản xuất, bạn nên thêm xác thá»±c vá»›i má»™t mảng gồm 2–3 dấu vân tay để há»— trợ luân chuyển.

Certificate Pinning so vá»›i Public Key Pinning

Khi triển khai pinning, cần chá»�n đối tượng mật mã nào để cố định. Certificate Pinning liên kết vá»›i chính chứng chỉ X.509 — số sê-ri, thá»�i hạn hiệu lá»±c và toàn bá»™ chuá»—i. Public Key Pinning chỉ cố định khóa công khai bên trong chứng chỉ, bá»� qua các trưá»�ng khác. Sá»± lá»±a chá»�n này ảnh hưởng đáng kể đến chi phà vận hành.

Tiêu chÃCertificate PinningPublic Key Pinning
�ối tượng cố địnhToàn bộ chứng chỉ X.509Khóa công khai RSA/ECDSA
Luân chuyểnYêu cầu cập nhật mỗi lần cấp lạiKhông thay đổi khi gia hạn chứng chỉ với cùng khóa
Bảo mậtLiên kết chÃnh xác tối Ä‘aÃ�t nhạy cảm vá»›i chi tiết
Linh hoạtThấp — chứng chỉ thay đổi má»—i 1–2 nămCao — khóa có thể dùng 5–10 năm
Khuyến nghịCho hệ thống quan tr�ng có cập nhật kiểm soátCho hầu hết ứng dụng di động và API

Public Key Pinning là lá»±a chá»�n ưu tiên cho hầu hết các dá»± án. Các khóa công khai cá»§a máy chá»§ thưá»�ng không thay đổi khi cấp lại chứng chỉ — công ty chỉ ký khóa cÅ© vá»›i chứng chỉ má»›i. Ä�iá»�u này có nghÄ©a là ứng dụng không yêu cầu cập nhật sau khi thay đổi chứng chỉ nếu cặp khóa không thay đổi. Ngược lại, Certificate Pinning được khuyến nghị cho các kịch bản mà nhà phát triển kiểm soát hoàn toàn cả máy chá»§ và mã máy khách, chẳng hạn như ứng dụng doanh nghiệp vá»›i chu kỳ cập nhật chặt chẽ.

Trust On First Use (TOFU)

TOFU là một chiến lược mà Certificate Pinning không được cấu hình trước mà ghi nhớ chứng chỉ ở kết nối đầu tiên với máy chủ. Cách tiếp cận này thuận tiện cho các ứng dụng không biết trước sẽ kết nối với máy chủ nào. Nhược điểm là dễ bị tấn công ban đầu: nếu kết nối đầu tiên bị chặn, một chứng chỉ giả mạo sẽ được chấp nhận là đáng tin cậy. TOFU được sử dụng trong các kết nối SSH và một số giao thức P2P.

Triển khai trên iOS và Android

Trên cả hai ná»�n tảng, Certificate Pinning được triển khai bằng cách chặn kết nối TLS ở cấp độ ngăn xếp mạng. Trên iOS, á»§y quyá»�n URLSession hoặc Alamofire ServerTrustManager được sá»­ dụng. Trên Android, phương pháp ưu tiên là OkHttp CertificatePinner, được tích hợp trong các trình khách HTTP phổ biến và há»— trợ cấu hình nhiá»�u dấu vân tay cho má»—i miá»n.

swift
func validate(serverTrust: SecTrust,
    pinnedHash: String) -> Bool {
    guard let certificates = SecTrustCopyCertificateChain(serverTrust)
        as? [SecCertificate] else { return false }

    for certificate in certificates {
        let data = SecCertificateCopyData(certificate)
        var hash = Data(repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
        data.withUnsafeBytes {
            CC_SHA256($0.baseAddress,
                CC_LONG(data.count), &hash)
        }
        if hash.base64EncodedString() == pinnedHash {
            return true
        }
    }
    return false
}

Trong hàm Swift, chuá»—i chứng chỉ được trích xuất từ serverTrust, băm SHA-256 được tÃnh cho má»—i chứng chỉ, và kết quả được so sánh vá»›i dá»± kiến. Việc lăp qua tất cả các chứng chỉ trong chuá»—i cho phép triển khai pinning ở cấp độ CA trung gian — nếu chứng chỉ trung gian khá»›p, kết nối được chấp nhận. Ä�iá»�u này mang lại sá»± linh hoạt khi luân chuyển chứng chỉ lá.

TrustManager tùy chỉnh cho Android

Nếu ứng dụng không sử dụng OkHttp, Certificate Pinning có thể được triển khai thông qua X509TrustManager tùy chỉnh. Phương pháp này yêu cầu nhi�u mã hơn nhưng cung cấp kiểm soát hoàn toàn quá trình xác thực. TrustManager ghi đè phương thức checkServerTrusted, nơi nhà phát triển tự xác thực thủ công các chứng chỉ của máy chủ và quyết định có tin tưởng hay không. Nó chỉ được khuyến nghị cho các kịch bản cụ thể m� thư viện OkHttp không có sẵn.

Các lỗi khi triển khai Certificate Pinning

Lỗi phổ biến nhất là thiếu backup pins. Nhà phát triển chỉ bao gồm một dấu vân tay chứng chỉ duy nhất, và khi nó hết hạn, ngư�i dùng mất kết nối hàng loạt. Cấu hình tối thiểu chấp nhận được là hai dấu vân tay: chứng chỉ hiện tại và một dự phòng. Lý tưởng là ba: hiện tại, một dự phòng và dấu vân tay CA gốc làm phương án dự phòng.

Lá»—i thứ hai là lưu trữ pins ở dạng văn bản thuần trong mã. Kẻ tấn công có quyá»�n truy cập APK hoặc IPA có thể dá»… dàng trích xuất và thay thế các dấu vân tay. Nên làm mÆ¡ băm: chia chuá»—i thành các phần, lưu trữ trong tài nguyên đã mã hóa hoặc tÃnh toán trong thá»�i gian chạy. Ä�ối vá»›i Android, ProGuard vá»›i tÃnh năng làm mÆ¡ hằng chuá»—i là hiệu quả.

Lỗi thứ ba là pinning ở cấp độ chứng chỉ phát triển. Chứng chỉ phát triển và sản xuất thư�ng khác nhau, nhưng nhà phát triển thư�ng quên chuyển đổi pins khi xây dựng bản release. Kết quả là ứng dụng sản xuất không thể kết nối với máy chủ. Giải pháp là các cấu hình pin riêng cho debug và release thông qua BuildConfig hoặc tài nguyên theo flavor.

  • Bá»� qua chuá»—i chứng chỉ — chỉ kiểm tra chứng chỉ lá mà không xem xét các CA trung gian, gây gián Ä‘oạn kết nối khi luân chuyển
  • Ngày cứng — ngày hết hạn chứng chỉ được mã cứng mà không thay đổi sau khi cập nhật
  • Không có giám sát — thiếu cảnh báo vá»� lá»—i Certificate Pinning, khiến vấn Ä‘á»� chỉ được phát hiện từ ngưá»�i dùng
  • TOFU không xác thá»±c — sá»­ dụng Trust On First Use mà không có xác thá»±c bổ sung, cho phép cuá»™c tấn công MITM đầu tiên cố định chứng chỉ giả

Câu h�i thư�ng gặp

Certificate Pinning khác SSL Pinning như thế nào?

SSL Pinning là thuật ngữ chung cho việc liên kết với chứng chỉ SSL/TLS. Certificate Pinning là một triển khai cụ thể cố định chính chứng chỉ X.509, chứ không chỉ khóa công khai. Sự khác biệt nằm ở đối tượng liên kết: chứng chỉ so với khóa.

Làm thế nào để lưu trữ dấu vân tay chứng chỉ an toàn trong ứng dụng?

Nên lưu trữ băm trong tài nguyên vá»›i tÃnh năng làm mÆ¡ qua ProGuard (Android) hoặc mã hóa qua Keychain (iOS). Tránh lưu trữ pins ở dạng văn bản thuần trong strings.xml hoặc Info.plist mà không mã hóa.

Bao lầu nên thay đổi dấu vân tay đã cố định?

Má»—i khi thay đổi chứng chỉ trên máy chá»§. Nên thêm má»™t dấu vân tay má»›i làm backup pin 3–6 tháng trước khi dấu hiện tại hết hạn và xóa dấu cÅ© sau khi luân chuyển. Ã�t nhất má»™t backup pin là bắt buá»™c.

Có thể tắt Certificate Pinning để gỡ lỗi không?

Có, thông qua biên dịch có đi�u kiện: pinning bị tắt trong bản debug và được bật trong bản release. Sử dụng BuildConfig.DEBUG trên Android hoặc #if DEBUG trên iOS để chuyển đổi. Không bao gi� thực hiện đi�u này thông qua c� chạy mà ngư�i dùng có thể truy cập.

Làm gì nếu chứng chỉ bị xâm nhập?

Ngay lập tức phát hành bản cập nhật ứng dụng vá»›i dấu vân tay má»›i và công bố lên các cá»a hàng. Sá»­ dụng cÆ¡ chế cập nhật bắt buá»™c. Nếu backup pins bao gồm dấu vân tay cá»§a CA dá»± phòng, bạn có thể tạm thá»�i chuyển sang má»™t miá»�n khác vá»›i chứng chỉ khác.

Tổng kết

  • Certificate Pinning — cố định má»™t chứng chỉ đáng tin cậy hoặc khóa công khai cá»§a nó để bảo vệ khá»�i các cuá»™c tấn công MITM qua CAs giả mạo
  • Hai cách tiếp cận — certificate pinning (chặt chẽ, vá»›i chứng chỉ) và public key pinning (linh hoạt, vá»›i khóa công khai)
  • Backup pins bắt buá»™c — ít nhất 2 dấu vân tay để đảm bảo tÃnh liên tục khi luân chuyển chứng chỉ
  • OkHttp CertificatePinner — phương pháp triển khai tiêu chuẩn trên Android vá»›i há»— trợ nhiá»�u pin
  • URLSessionDelegate — phương pháp chính trên iOS vá»›i xác thá»±c thá»§ công SecTrust và băm SHA-256
  • Các lá»—i thưá»�ng gặp — thiếu backup pins, lưu trữ không làm mÆ¡, nhầm lẫn cấu hình debug/release
  • Khuyến nghị — sá»­ dụng public key pinning cho hầu hết dá»± án và Certificate Pinning chỉ cho các hệ thống quan trá»�ng

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm