# Squid 4.0.6 release notes

## Squid Developers

This document contains the release notes for version 4 of Squid. Squid is a WWW Cache application developed by the National Laboratory for Applied Network Research and members of the Web Caching community.

## 1. Notice

- 1.1 Known issues
- 1.2 Changes since earlier releases of Squid-4

## 2. Major new features since Squid-3.5

- 2.1 Configurable helper queue size
- 2.2 Helper concurrency channels changes
- 2.3 SSL support removal
- 2.4 Helper Binary Changes
- 2.5 Secure ICAP
- 2.6 Improved SMP support

## 3. Changes to squid.conf since Squid-3.5

- 3.1 New tags
- 3.2 Changes to existing tags
- 3.3 Removed tags

## 4. Changes to ./configure options since Squid-3.5

- 4.1 New options
- 4.2 Changes to existing options
- 4.3 Removed options

## 5. Regressions since Squid-2.7

- 5.1 Missing squid.conf options available in Squid-2.7

## 6. Copyright

## 1. Notice

The Squid Team are pleased to announce the release of Squid-4.0.6 for testing.

This new release is available for download from http://www.squid-cache.org/Versions/v4/ or the mirrors.

While this release is not deemed ready for production use, we believe it is ready for wider testing by the community.

We welcome feedback and bug reports. If you find a bug, please see http://wiki.squid-cache.org/SquidFaq/BugReporting for how to submit a report with a stack trace.

## 1.1 Known issues

Although this release is deemed good enough for use in many setups, please note the existence of open bugs against Squid-4.

This release adds a dependency on C++11 support in any compiler used to build Squid. As a result older C++03 -only and most C++0x compilers will no longer build successfully. GCC 4.9+ and Clang 3.5+ are known to have working C++11 support and are usable. GCC-4.8 will also build for now despite lack of full C++11 support, but some future features may not be available.

## 1.2 Changes since earlier releases of Squid-4

The Squid-4 change history can be viewed here.

## 2. Major new features since Squid-3.5

Squid 4 represents a new feature release above 3.5.

The most important of these new features are:

- Configurable helper queue size
- Helper concurrency channels changes
- SSL support removal
- Helper Binary Changes
- Secure ICAP
- Improved SMP support

Most user-facing changes are reflected in squid.conf (see below).

## 2.1 Configurable helper queue size

The new queue-size=N option to helpers configuration, allows users to configure the maximum number of queued requests to busy helpers.

## 2.2 Helper concurrency channels changes

helper-mux.pl we have been distributing for the past few years to encourage use of concurrency is no longer compatible with Squid. If used it will spawn up to 2^64 helpers and DoS the Squid server.

Helpers utilizing arrays to handle fixed amounts of concurrency channels MUST be re-written to use queues and capable of handling a 64-bit int as index or they will be vulnerable to buffer overrun and arbitrary memory accesses.

32-bit helpers need re-writing to handle the concurrency channel ID as a 64-bit integer value. If not updated they will cause proxies to return unexpected results or timeout once crossing the 32-bit wrap boundary. Leading to undefined behaviour in the client HTTP traffic.

## 2.3 SSL support removal

Details in RFC 6176 and RFC 7568

SSLv2 is not fit for purpose. Squid no longer supports being configured with any settings regarding this protocol. That includes settings manually disabling its use since it is now forced to disable by default. Also settings enabling various client/server workarounds specific to SSLv2 are removed.

SSLv3 is not fit for purpose. Squid still accepts configuration, but use is deprecated and will be removed entirely in a future version. Squid default behavour is to follow the TLS built in negotiation mechanism which prefers the latest TLS version. But also to accept downgrades to SSLv3. Use tls-options=NO_SSLv3 to disable SSLv3 support completely.

A new option tls-min-version=1.N is added in place of sslversion= to configure the minimum version the TLS negotiation will allow to be used when an old TLS version is requested by the remote endpoint.

The system Trusted CAs are no longer used by default when verifying client certificates. The cafile= option should be used instead to load the specific CA which signed acceptible client certificates explicitly, even if that CA is one of the system Trusted CAs. The tls-default-ca option can be used to restore the old behaviour explicitly if needed.

## 2.4 Helper Binary Changes

The basic_msnt_multi_domain_auth helper has been removed. The basic_smb_lm_auth helper performs the same actions without extra Perl and Samba dependencies.

The cert_valid.pl testing helper has been renamed to security_fake_certverify, reflecting the Squid helper naming schema and that it does not actually perform any certificate checks.

The security_fake_certverify helper is also now built and installed by default. It is written in Perl so does not require OpenSSL dependencies for installation. But does use the Perl Crypt::OpenSSL::X509 module for execution. Building the helper can be controlled using the --enable-security-cert-validators="fake" option.

The ssl_crtd helper has been renamed to security_file_certgen and is now built and installed by default whenever OpenSSL support is enabled. Building the helper can be controlled using the --enable-security-cert-generators="file" option. NOTE: The --enable-ssl-crtd option is still required to enable the sslcrtd_program helper interface within Squid that uses the helper.

The ntlm_smb_lm_auth helper is now built using --enable-auth-ntlm="SMB_LM". Notice the upper case where it was previously a (wrongly) lower cased acronym.

## 2.5 Secure ICAP

ICAP services can now be used over TLS connections.

To mark an ICAP service as secure, use an icaps:// service URI scheme when listing your service via an icap_service directive. The industry is using a Secure ICAP term, and Squid follows that convention, but icaps seems more appropriate for a scheme name.

Squid uses port 11344 for Secure ICAP by default, following another popular proxy convention. The old 1344 default for plain ICAP ports has not changed.

## 2.6 Improved SMP support

Use of C++11 atomic operations instead of GNU atomics allows a wider range of operating systems and compilers to build Squid SMP and multi-process features. However this does require a C++11 or C++0x compiler with a recent version of the C++ standard library.

IpcIo and Mmapped disk I/O modules are now auto-detected properly which enables Rock storage on more systems by default than previously.

## 3. Changes to squid.conf since Squid-3.5

There have been changes to Squid's configuration file since Squid-3.5.

This section gives a thorough account of those changes in three categories:

- New tags
- Changes to existing tags
- Removed tags

## 3.1 New tags

tls_outgoing_options

  New directive to define TLS security context options for outgoing connections. For example to HTTPS servers.

url_rewrite_timeout

  Squid times active requests to redirector. This option sets the timeout value and the Squid reaction to a timed out request.

## 3.2 Changes to existing tags

acl

  New -m flag for note ACL to match substrings.

auth_param

  New parameter queue-size= to set the maximum number of queued requests.

cache_peer

  New option auth-no-keytab to let GSSAPI implementation determine which Kerberos credentials to use, instead of specifying a keytab.

  New option tls-min-version=1.N to set minimum TLS version allowed.

  New option tls-default-ca replaces sslflags=NO_DEFAULT_CA

  New option tls-no-npn to disable sending TLS NPN extension.

  All ssloptions= values for SSLv2 configuration or disabling have been removed.

  Removed sslversion= option. Use tls-options= instead.

  Manual squid.conf update may be required on upgrade.

  Replaced sslcafile= with tls-cafile= which takes multiple entries.

external_acl_type

  New parameter queue-size= to set the maximum number of queued requests.

  Format field updated to accept any logformat %macro code.

http_port

  New option tls-min-version=1.N to set minimum TLS version allowed.

  New option tls-default-ca replaces sslflags=NO_DEFAULT_CA

  New option tls-no-npn to disable sending TLS NPN extension.

  All option= values for SSLv2 configuration or disabling have been removed.

  Removed version= option. Use tls-options= instead.

  Manual squid.conf update may be required on upgrade.

  Replaced cafile= with tls-cafile= which takes multiple entries.

  New option tls-default-ca replaces sslflags=NO_DEFAULT_CA, the default is also changed to OFF.

https_port

  New option tls-min-version=1.N to set minimum TLS version allowed.

  New option tls-default-ca replaces sslflags=NO_DEFAULT_CA, the default is also changed to OFF.

  New option tls-no-npn to disable sending TLS NPN extension.

  All options= values for SSLv2 configuration or disabling have been removed.

  Removed version= option. Use tls-options= instead.

  Manual squid.conf update may be required on upgrade.

  Replaced cafile= with tls-cafile= which takes multiple entries.

icap_service

  New scheme icaps:// to enable TLS/SSL connections to Secure ICAP servers on port 11344.

  New tls-cert= option to set TLS client certificate to use.

  New tls-key= option to set TLS private key matching the client certificate used.

  New tls-min-version=1.N option to set minimum TLS version allowed on server connections.

  New tls-options= option to set OpenSSL library parameters.

  New tls-flags= option to set flags modifying Squid TLS operations.

  New tls-cipher= option to set a list of ciphers permitted.

  New tls-cafile= option to set a file with additional CA certificate(s) to verify the server certificate.

  New tls-crlfile= option to set a file with a CRL to verify the server certificate.

  New tls-default-ca option to use the system Trusted CAs to verify the server certificate.

  New tls-domain= option to verify the server certificate domain.

logformat

  New code %ssl::<cert_errors to display server certificate errors.

  New code %ssl::>negotiated_version to display negotiated TLS version of the client connection.

  New code %ssl::<negotiated_version to display negotiated TLS version of the last server or peer connection.

  New code %ssl::>received_hello_version to display the TLS version of the Hello message received from TLS client.

  New code %ssl::<received_hello_version to display the TLS version of the Hello message received from TLS server.

  New code %ssl::>received_supported_version to display the maximum TLS version supported by the TLS client.

  New code %ssl::<received_supported_version to display the maximum TLS version supported by the TLS server.

  New code %ssl::>negotiated_cipher to display the negotiated cipher of the client connection.

  New code %ssl::<negotiated_cipher to display the negotiated cipher of the last server or peer connection.

pid_filename

  Default value now based on squid -n command line parameter.

refresh_pattern

  Removed option ignore-auth. Its commonly desired behaviour is performed by default with correct HTTP/1.1 revalidation.

  Removed ignore-must-revalidate. Other more HTTP compliant directives (cache, store_miss) can be used to prevent objects from caching.

sslcrtd_children

  New parameter queue-size= to set the maximum number of queued requests.

sslcrtvalidator_children

  New parameter queue-size= to set the maximum number of queued requests.

url_rewrite_children

  New parameter queue-size= to set the maximum number of queued requests.

## 3.3 Removed tags

cache_peer_domain

  Superceded by cache_peer_access. Use dstdomain ACL in the access control list to restrict domains requested.

sslproxy_cafile

  Replaced by tls_outgoing_options cafile=. Which now takes multiple entries.

sslproxy_capath

  Replaced by tls_outgoing_options capath=.

sslproxy_cipher

  Replaced by tls_outgoing_options cipher=.

sslproxy_client_certificate

  Replaced by tls_outgoing_options cert=.

sslproxy_client_key

  Replaced by tls_outgoing_options key=.

sslproxy_flags

  Replaced by tls_outgoing_options flags=.

sslproxy_options

  Replaced by tls_outgoing_options options=.

  All values for SSLv2 configuration or disabling have been removed.

  Manual squid.conf update may be required on upgrade.

sslproxy_version

  Replaced by tls_outgoing_options options=.

  All values for SSLv2 configuration or disabling have been removed.

  Manual squid.conf update may be required on upgrade.

## 4. Changes to ./configure options since Squid-3.5

There have been some changes to Squid's build configuration since Squid-3.5.

This section gives an account of those changes in three categories:

- New options
- Changes to existing options
- Removed options

## 4.1 New options

--enable-security-cert-generators

  New option to control which TLS/SSL dynamic certificate generator helpers are built and installed.

  Helper ssl_crtd has been renamed to security_file_certgen and built with module name file. Requires --with-openssl.

--enable-security-cert-validators

  New option to control which TLS/SSL certificate validation helpers are built and installed.

  One fake helper that does not actually perform any certificate checks is provided for testing and as an example for writing custom helpers.

## 4.2 Changes to existing options

--enable-auth-basic

  The MSNT-multi-domain helper has been removed.

--enable-auth-ntlm

  The SMB LanMan helper is now built using SMB_LM (was lower case smb_lm).

--enable-diskio

  Auto-detection of SMP related modules has been fixed to actually auto-detect them without configuring the module list manually.

## 4.3 Removed options

## 5. Regressions since Squid-2.7

Some squid.conf options which were available in Squid-2.7 are not yet available in Squid-4

If you need something to do then porting one of these from Squid-2 to Squid-3 is most welcome.

## 5.1 Missing squid.conf options available in Squid-2.7

broken_vary_encoding

  Not yet ported from 2.6

cache_peer

  monitorinterval= not yet ported from 2.6

  monitorsize= not yet ported from 2.6

  monitortimeout= not yet ported from 2.6

  monitorurl= not yet ported from 2.6

cache_vary

  Not yet ported from 2.6

error_map

  Not yet ported from 2.6

external_refresh_check

  Not yet ported from 2.7

location_rewrite_access

  Not yet ported from 2.6

location_rewrite_children

  Not yet ported from 2.6

location_rewrite_concurrency

  Not yet ported from 2.6

location_rewrite_program

  Not yet ported from 2.6

refresh_pattern

  stale-while-revalidate= not yet ported from 2.7

  ignore-stale-while-revalidate= not yet ported from 2.7

  negative-ttl= not yet ported from 2.7

refresh_stale_hit

  Not yet ported from 2.7

update_headers

  Not yet ported from 2.7

## 6. Copyright

Copyright (C) 1996-2016 The Squid Software Foundation and contributors

Squid software is distributed under GPLv2+ license and includes contributions from numerous individuals and organizations. Please see the COPYING and CONTRIBUTORS files for details.