When working with libcurl in Ubuntu 11.10, you're essentially choosing between two SSL/TLS implementations:
- libcurl4-gnutls-dev: Uses GNUTLS as its cryptographic backend
- libcurl4-nss-dev: Uses Mozilla's NSS (Network Security Services) library
The choice primarily affects:
// Example curl initialization with different backends
CURL *curl = curl_easy_init();
if(curl) {
// This underlying TLS behavior changes based on backend
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
// Additional configuration...
}
GNUTLS (libcurl4-gnutls-dev):
- Generally more permissive with certificate validation
- May work better with self-signed certificates
- Sometimes has better performance with certain protocols
NSS (libcurl4-nss-dev):
- Stricter security policies by default
- Better integration with system certificate stores
- Preferred for environments requiring FIPS compliance
The version difference (3 vs 4) primarily relates to API compatibility. Key points:
// libcurl3 code may need adjustment for libcurl4
// Example of deprecated option in older versions
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANYSAFE);
Major version changes typically introduce breaking API modifications. For new development, always target libcurl4.
For most Ubuntu 11.10 server applications:
sudo apt-get install libcurl4-gnutls-dev
Is generally the safer choice unless you have specific NSS requirements.
If you encounter SSL-related problems after installation:
// Verify which backend is actually being used
curl_version_info_data *ver = curl_version_info(CURLVERSION_NOW);
printf("SSL backend: %s\n", ver->ssl_version);
Remember that some applications may have hard dependencies on a specific backend.
When working with libcurl in Ubuntu 11.10, you'll encounter two primary development packages:
libcurl4-gnutls-dev - Uses GNUTLS as the SSL backend
libcurl4-nss-dev - Uses Mozilla's NSS as the SSL backend
The core difference lies in their cryptographic implementations:
- Protocol Support: GNUTLS generally supports more protocols (including DTLS) while NSS focuses on mainstream protocols
- Certificate Handling: NSS uses its own certificate store while GNUTLS uses the system's
- Performance: GNUTLS may perform better with certain cipher suites
The version jump from 3 to 4 introduced several breaking changes:
// libcurl3 (deprecated)
#include
CURL *curl = curl_easy_init();
// libcurl4 (current)
// Same interface but with updated SSL backend options
Key differences include updated API constants, improved SSL verification defaults, and support for newer protocols like HTTP/2.
Here's how to check which backend your installation is using:
#include
#include
int main() {
curl_version_info_data *data = curl_version_info(CURLVERSION_NOW);
printf("SSL backend: %s\n", data->ssl_version);
return 0;
}
Compile and run with:
gcc curl_backend_check.c -lcurl -o backend_check
./backend_check
When moving between versions or backends:
- Test all SSL/TLS connections thoroughly
- Verify certificate handling behavior
- Check for any protocol-specific features your application might rely on
To install a specific backend:
# For GNUTLS backend
sudo apt-get install libcurl4-gnutls-dev
# For NSS backend
sudo apt-get install libcurl4-nss-dev
Remember that most applications will work with either backend, but some may have specific requirements.