All Products
Search
Document Center

HTTPDNS:Praktik terbaik untuk mengintegrasikan DoH dalam kerangka kerja CEF

Last Updated:Nov 10, 2025

Dokumen ini menjelaskan cara mengintegrasikan DNS over HTTPS (DoH) ke dalam Chromium Embedded Framework (CEF).

1. Pendahuluan

Chromium Embedded Framework (CEF) adalah kerangka kerja sumber terbuka berbasis Chromium yang banyak digunakan dalam aplikasi desktop yang memerlukan fitur penjelajahan web tersemat. Dalam skenario umum CEF, resolusi Domain Name System (DNS) tradisional mungkin tidak memenuhi persyaratan keamanan, terutama di lingkungan yang menangani data sensitif atau memerlukan keamanan tinggi. DoH mentransmisikan kueri dan tanggapan DNS melalui saluran HTTPS terenkripsi, sehingga secara efektif mencegah serangan man-in-the-middle, pembajakan DNS, dan sniffing lalu lintas. Pendekatan ini meningkatkan keamanan aplikasi serta perlindungan privasi pengguna. Dengan mengintegrasikan DoH ke dalam kerangka kerja CEF, pengembang dapat secara signifikan meningkatkan keamanan dan pengalaman pengguna browser tersemat tanpa mengubah logika aplikasi yang ada.

2. Prasyarat

Sebelum mengintegrasikan DoH ke dalam kerangka kerja CEF, pastikan Anda telah menyelesaikan langkah-langkah dalam Mengonfigurasi layanan DoH.

Catatan
  • CEF menggunakan nama domain probe bawaan google.com untuk memeriksa ketersediaan DoH. Sebelum probe selesai, ketersediaan DoH dianggap belum ditentukan. Untuk memastikan layanan DoH berfungsi dengan benar, pastikan Anda menambahkan nama domain google.com ke daftar resolusi atau mengizinkan resolusi untuk semua nama domain.

  • Persyaratan versi CEF: Disarankan menggunakan versi 115 atau lebih baru (setara dengan Chromium 115+).

3. Langkah integrasi

Mengintegrasikan DoH ke dalam kerangka kerja CEF mencakup tiga langkah inti. Pertama, konfigurasikan jalur cache tingkat aplikasi yang independen untuk menghindari konflik konfigurasi. Kedua, gunakan API Preferensi untuk mengatur templat dan mode DoH guna mengaktifkan layanan DNS terenkripsi. Ketiga, terapkan mekanisme fallback otomatis untuk memastikan stabilitas layanan. Bagian berikut menjelaskan cara melaksanakan setiap langkah tersebut.

3.1 Mengonfigurasi jalur cache aplikasi CEF

Solusi ini mengharuskan Anda mengonfigurasi jalur cache tingkat aplikasi yang independen. Jika Anda tidak menetapkan jalur cache dan menggunakan jalur default, aplikasi CEF lainnya dapat mencemari cache aplikasi Anda, sehingga menyebabkan konfigurasi DoH gagal atau tertimpa.

Saat menginisialisasi CEF, Anda dapat menetapkan jalur cache melalui objek CefSettings. Pastikan aplikasi memiliki izin untuk mengakses jalur tersebut. Kode berikut memberikan contohnya:

void ConfigureCachePath(CefSettings& settings) {
    // Set the root cache path
    std::string cache_path;
    
#if defined(OS_MAC)
    cache_path = std::string("/Users/") + getenv("USER") + "/Library/Application Support/YourAppName/cache";
#elif defined(OS_WIN)
    cache_path = std::string(getenv("LOCALAPPDATA")) + "\\YourAppName\\cache";
#else
    cache_path = std::string(getenv("HOME")) + "/.cache/YourAppName";
#endif
    
    CefString(&settings.root_cache_path) = cache_path;
    CefString(&settings.cache_path) = cache_path;
}

// Use in the main function
int main(int argc, char* argv[]) {
    CefSettings settings;

    // Other parameter configurations
    // ...
    
    ConfigureCachePath(settings);
    
    // Initialize CEF
    CefInitialize(main_args, settings, app.get(), nullptr);
    // ...
}

3.2 Mengonfigurasi DoH menggunakan Preferensi

Anda dapat menggunakan CefPreferenceManager untuk mengonfigurasi DoH. Contoh implementasinya sebagai berikut:

void UpdateDnsOverHttpsTemplate(const std::string& new_template) {
    // Get the global CefPreferenceManager instance
    CefRefPtr<CefPreferenceManager> pref_manager = 
        CefPreferenceManager::GetGlobalPreferenceManager();
    
    // Set the DoH template
    CefRefPtr<CefValue> template_value = CefValue::Create();
    template_value->SetString(new_template);
    
    // Set the DoH mode to "secure"
    CefRefPtr<CefValue> mode_value = CefValue::Create();
    mode_value->SetString("secure");
    
    // Apply the settings
    CefString error;
    pref_manager->SetPreference("dns_over_https.mode", mode_value, error);
    pref_manager->SetPreference("dns_over_https.templates", template_value, error);
}

// Call during application initialization
void OnContextInitialized(CefRefPtr<ClientAppBrowser> app) override {
    // Replace this with your own dedicated DoH endpoint
    UpdateDnsOverHttpsTemplate("https://1xxxx3.aliyunhttpdns.com/dns-query");
}

3.3 Menerapkan mekanisme fallback otomatis

CEF mendukung mode DoH berikut:

  • secure: Memaksa penggunaan DoH tanpa fallback ke DNS standar.

  • automatic: Mode otomatis yang memungkinkan fallback ke DNS standar jika DoH gagal.

  • off: Menonaktifkan DoH.

Untuk meningkatkan ketersediaan aplikasi, Anda dapat menerapkan mekanisme fallback otomatis yang secara otomatis beralih ke DNS lokal jika resolusi DoH gagal. Contoh implementasinya sebagai berikut:

void ClientHandler::OnLoadError(CefRefPtr<CefBrowser> browser,
                                CefRefPtr<CefFrame> frame,
                                ErrorCode errorCode,
                                const CefString& errorText,
                                const CefString& failedUrl) {
  // Check for DNS-related errors
  if (errorCode == ERR_NAME_NOT_RESOLVED ||
      errorCode == ERR_NAME_RESOLUTION_FAILED) {
    LOG(ERROR) << "DNS resolution failed for URL: " << failedUrl.ToString()
              << ". Error code: " << errorCode
              << ". Switching to Local DNS...";

    // Get the global preference manager
    CefRefPtr<CefPreferenceManager> pref_manager =
        CefPreferenceManager::GetGlobalPreferenceManager();

    // Switch to automatic mode to allow the use of local DNS
    CefRefPtr<CefValue> new_mode = CefValue::Create();
    new_mode->SetString("automatic");

    CefString error;
    if (pref_manager->SetPreference("dns_over_https.mode", new_mode, error)) {
      // Retry loading the failed page
      frame->LoadURL(failedUrl);
      return;
    }
  }
  // Handle other errors...
}

4. Ringkasan

Dengan mengikuti langkah-langkah dalam dokumen ini, Anda dapat berhasil mengintegrasikan fitur DoH ke dalam kerangka kerja CEF, sehingga secara signifikan meningkatkan kemampuan keamanan dan perlindungan privasi aplikasi Anda. Setelah dikonfigurasi, Anda dapat memverifikasi integrasi DoH dengan menangkap paket jaringan untuk melihat permintaan HTTPS, memeriksa log DNS, atau melakukan pengujian gangguan jaringan. Untuk memastikan stabilitas di lingkungan produksi, gunakan mode automatic dan konfigurasikan beberapa server DoH.