Se quiseres consumir web services que estejam alojados num servidor https programaticamente em c# basta, antes da chamada ao serviço, alterar a politica de certificados usada pelo método:

System.Net.ServicePointManager.CertificatePolicy = new MyCertificatePolicy();

Isto faz com que a chamada ao serviço use a nossa classe, MyCertificatePolicy, para saber se aceita os certificados usados pelo servidor. Assim, se quiseres que o programa aceite todos os certificados, mesmo que tenham problemas de segurança (mal assinados, etc) basta definir a classe como:

public class MyCertificatePolicy : System.Net.ICertificatePolicy

{

    public bool CheckValidationResult(System.Net.ServicePoint sp,

        System.Security.Cryptography.X509Certificates.X509Certificate cert,

        System.Net.WebRequest req,

        int problem)

        {

            return true;

        }

}

Simples.

Update:

A property CertificatePolicy está marcada como obsoleta. A forma correcta é passar um delegado para o ServerCertificateValidationCallback. No meu caso, fiz um delegado anónimo:

ServicePointManager.ServerCertificateValidationCallback += delegate
    {
        return true;
    };