EDIT: Como apontado por Krumelur, o protocolo TLS permite que a renegociação da sessão seja iniciada pelo servidor web, onde o cliente pode solicitar o certificado do cliente, se necessário. Portanto, a resposta original abaixo não é válida para o problema.
A autenticação do certificado ocorre durante o handshake do cliente-servidor TLS e o HTTP é executado somente quando o reconhecimento é executado.
A cadeia user-agent faz parte da solicitação HTTP que o cliente envia pelo túnel TLS. Não é conhecido pelo servidor antes de o túnel TLS ser estabelecido e o cliente enviou a sua primeira solicitação HTTP.
Portanto, a única opção é trabalhar com o TLS. Agora, olhando para o RFC 5246, capítulo 7.4, podemos ver a especificação das mensagens Hello, que iniciam o handshake TLS.
A mensagem do Cliente Hello contém:
- hora atual
- 28 bytes aleatórios
- Conjunto de cifras
- Uma lista de métodos de compactação suportados
- Extensões possíveis de TLS
O servidor envia de volta sua própria mensagem Hello e o certificado do servidor imediatamente após a mensagem Hello. Em seguida, ele envia uma mensagem de troca de chave do servidor e, em seguida, a solicitação de certificado do servidor, se configurada.
Agora, podemos ver que a única informação enviada pelo cliente não inclui nenhuma informação sobre o tipo de cliente. A única informação extra fornecida é a parte de extensão TLS, e a lista de extensões TLS atuais está em link .
Olhando para a lista, não há informações sobre o tipo de cliente, mesmo em extensões TLS. Mesmo que houvesse uma extensão desse tipo, todos os clientes móveis ou de área de trabalho devem suportar essa extensão antes que o sistema funcione corretamente.
Portanto, a conclusão é que você não pode atingir sua meta de usar certificados de cliente em dispositivos móveis e não em computadores, porque o servidor não pode saber quando solicitar um certificado de cliente.Sua única opção é usar o SNI como sugerido por @Alexey Ten