Q:

Como pegar a data de um servidor invés de servidor local?

Fiz as seguinte forma de licença 
con.executaSql("select *from vencimento");
    con.rs.last();
    SimpleDateFormat df = new SimpleDateFormat("ddMMyyyy");
    Date hoje = new Date();
    String dataAtual = df.format(hoje);
    String dataSistema = con.rs.getString("data");
    int diaAt, mesAt, anoAt, diaVenc, mesVenc, anoVenc;
    diaAt = Integer.parseInt("" + dataAtual.charAt(0) + dataAtual.charAt(1));
    mesAt = Integer.parseInt("" + dataAtual.charAt(2) + dataAtual.charAt(3));
    anoAt = Integer.parseInt("" + dataAtual.charAt(4) + dataAtual.charAt(5) + dataAtual.charAt(6) + dataAtual.charAt(7));

    diaVenc = Integer.parseInt("" + dataSistema.charAt(0) + dataSistema.charAt(1));
    mesVenc = Integer.parseInt("" + dataSistema.charAt(2) + dataSistema.charAt(3));
    anoVenc = Integer.parseInt("" + dataSistema.charAt(4) + dataSistema.charAt(5) + dataSistema.charAt(6) + dataSistema.charAt(7));

    if ((diaAt <= diaVenc) && (mesAt <= mesVenc) && (anoAt == anoVenc)) {

        TelaPrincipal tela = new TelaPrincipal(jTextFieldUsername.getText());
        tela.setVisible(true);
        dispose();

    }else{
        TelaValidaSis validasis = new TelaValidaSis();
        validasis.setVisible(true);

    }

Quando o usuário ou cliente troca a data do computador o sistema ainda continua funcionando, queria pegar uma data não do sistema mais sim exemplo uma timezone não sei como fazer isto alguém poderia me ajudar sobre isto?
Estou usando MYSQL como banco de dados a tabela data esta em varchar

A:

Considerando que o seu banco de dados estará em um servidor que esteja fora do controle do usuário, uma das formas de resolver é diretamente na query da seguinte forma:
SELECT CASE
         WHEN STR_TO_DATE(data, '%d%m%Y') > CURDATE() THEN 'LIBERADO'
         ELSE 'VENCIDO'
       END AS estado
  FROM vencimento

Utilizei a seguinte criação de banco para validar a query:
create table vencimento(data varchar(8));
insert into vencimento values('20112016');
insert into vencimento values('15112016');

O case já fará a validação do estado atual da licença e retornará direto no campo se está VENCIDO ou LIBERADO. Assim o controle fica exatamente na sua query.
Após essa alteração você pode mudar a validação realizada na aplicação para:
String estado = con.rs.getString("estado");

if (estado.equals("LIBERADO")) {
  TelaPrincipal tela = new TelaPrincipal(jTextFieldUsername.getText());
  tela.setVisible(true);
  dispose();
} else {
  TelaValidaSis validasis = new TelaValidaSis();
  validasis.setVisible(true);
}

Pronto, a validação será realizada. Porém tenho uma dica para te dar. É importante que você separe as responsabilidades no seu programa. Você tem um método que acessa banco de dados e reencaminha tudo para a tela, então é importante que você tente organizar e separar as responsabilidades de cada classe para que o código não fique bagunçado.

