Giới thiệu tool giúp Trust SSL trên Android, iOS App nhanh chóng

Trust SSL hay Xác thực SSL trên Android , iOS là việc rất cần thiết, Với iOS nó là điều bắt buộc Trên Android thì từ Android 7 trở nên đã có cơ chế thiết lập xác thực bằng file xml

Tại sao phải xác thực... Google nhé. Với Android nếu app chỉ cần có lỗi về ssl thì lập tức app sẽ bị suspend đến khi nào bạn giải quyết được nó.

Sau đây mình bày mấy bạn các xác thực SSL nhanh đơn giản.

Mình có code 1 cái tools tại

https://network-security.haipq.com/

Bạn sẽ không cần kêu KH, DEV server "Gửi tao cái public or private key với" và chỉ cần truy cập vô tools trên

Ví dụ với app viblo chẳng hạn. ta có domain https://viblo.asia

Sử dụng tool ta sẽ lấy được public key, pin code của domain đó để xác thực trong app.

Issued by: COMODO RSA Domain Validation Secure Server CA, COMODO CA Limited, L=Salford, ST=Greater Manchester, GB

Expires: Apr 26, 2018 11:59:59 PM

Validated: True

Pinning code:

Digest: SHA-256 8bWQpgEgEIe9YqBw6gf7D7RpVNB26DIuqDHfwPTSW+g=
Digest: SHA-256 klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=
Digest: SHA-256 grX4Ta9HpZx6tSHkmCrvpApTQGo67CYDnvprLg5yRME=
Download: viblo.asia_public_key.cert

Và tool cung gen luôn những config cho Android, iOS để ta copy và sài luôn Ví dụ với Android : ta có file res/xml/network_security_config.xml đc tạo ra như sau

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config>
        <domain includeSubdomains="true">viblo.asia</domain>
        <pin-set expiration="2018-04-26">
                            <pin digest="SHA-256">8bWQpgEgEIe9YqBw6gf7D7RpVNB26DIuqDHfwPTSW+g=</pin>
                            <pin digest="SHA-256">klO23nT2ehFDXCfx3eHTDRESMz3asj1muO+4aIdjiuY=</pin>
                            <pin digest="SHA-256">grX4Ta9HpZx6tSHkmCrvpApTQGo67CYDnvprLg5yRME=</pin>
        </pin-set>
    </domain-config>
</network-security-config>

Config cho okhttp

OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .certificatePinner(new CertificatePinner.Builder()
                            .add("facebook.com", "sha256/hUIG87ch71EZQYhZBEkq2VKBLjhussUw7nR8wyuY7rY=")
                            .add("facebook.com", "sha256/k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=")
                            .add("facebook.com", "sha256/WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=")
            .build())
        .build();

iOS sẽ sử dụng trust kit

let trustKitConfig = [
            kTSKSwizzleNetworkDelegates: false,
            kTSKPinnedDomains: [
                "facebook.com": [
                    kTSKExpirationDate: "2018-01-25",
                    kTSKPublicKeyAlgorithms: [kTSKAlgorithmRsa2048],
                    kTSKPublicKeyHashes: [
                            "hUIG87ch71EZQYhZBEkq2VKBLjhussUw7nR8wyuY7rY=",
                            "k2v657xBsOVe1PQRwOsHsw3bsGT2VzIqz5K+59sNQws=",
                            "WoiWRyIOVNa9ihaBciRSC7XHjliYS9VwUGOIud4PB18=",
                    ],]]] as [String : Any]

        TrustKit.initialize(withConfiguration:trustKitConfig)

Ngoài ra bạn có thể tải public key của domain dạng domain.cert