[PD1] Fixed checking certificate NotAfter and NotBefore dates
This commit is contained in:
parent
4ea8315aed
commit
91bc887ba5
4 changed files with 38 additions and 6 deletions
|
@ -88,11 +88,16 @@ Tendo em consideração as vulnerabilidades e ameaças identificadas na análise
|
|||
- A assinatura é anexada ao texto limpo e esse conjunto é cifrado com uma chave de sessão gerada aleatoriamente.
|
||||
- A chave de sessão é cifrada com a chave pública do destinatário, Isso garante que apenas o destinatário possa decifrar a mensagem.
|
||||
|
||||
1. **Visualização de Mensagens**
|
||||
1. **Visualização da Lista de Mensagens Não Lidas**
|
||||
|
||||
- Quando um cliente solicita a sua lista de mensagens não lidas, apenas o assunto é enviado, não o conteúdo cifrado.
|
||||
- O cliente deve decifrar o assunto para visualizá-lo.
|
||||
|
||||
1. **Visualização de Mensagens**
|
||||
|
||||
- Quando um cliente solicita uma mensagem, é enviado o conteúdo todo da mensagem.
|
||||
- O cliente deve decifrar o assunto e o corpo da mensagem para visualizá-los.
|
||||
|
||||
1. **Troca de Chaves Públicas**
|
||||
|
||||
- Quando um cliente precisa da chave pública de outro cliente, solicita o certificado desse cliente ao servidor.
|
||||
|
|
|
@ -235,7 +235,7 @@ func (ds DataStore) storeUserCertIfNotExists(uid string, cert x509.Certificate)
|
|||
`
|
||||
_, err := ds.db.Exec(insertQuery, uid, cert.Raw)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error storing user certificate for UID %s: %v\n", uid, err)
|
||||
return fmt.Errorf("error storing user certificate for UID %s: %v", uid, err)
|
||||
}
|
||||
log.Printf("User certificate for UID %s stored successfully.\n", uid)
|
||||
return nil
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"crypto/x509"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"log"
|
||||
"os"
|
||||
|
@ -85,6 +86,13 @@ func (k KeyStore) CheckCert(cert *x509.Certificate, uid string) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if cert.NotAfter.Before(time.Now()) {
|
||||
return errors.New("certificate has expired")
|
||||
}
|
||||
if cert.NotBefore.After(time.Now()) {
|
||||
return errors.New("certificate is not valid yet")
|
||||
}
|
||||
|
||||
//Check if the pseudonym field is set to UID
|
||||
oidMap := ExtractAllOIDValues(cert)
|
||||
if oidMap["2.5.4.65"] != uid {
|
||||
|
@ -129,6 +137,14 @@ func (k *KeyStore) GetServerTLSConfig() *tls.Config {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if cert.NotAfter.Before(time.Now()) {
|
||||
return errors.New("certificate has expired")
|
||||
}
|
||||
if cert.NotBefore.After(time.Now()) {
|
||||
return errors.New("certificate is not valid yet")
|
||||
}
|
||||
|
||||
// Check if the certificate is signed by the specified CA
|
||||
_, err = cert.Verify(opts)
|
||||
if err != nil {
|
||||
|
@ -160,6 +176,13 @@ func (k *KeyStore) GetClientTLSConfig() *tls.Config {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if cert.NotAfter.Before(time.Now()) {
|
||||
return errors.New("certificate has expired")
|
||||
}
|
||||
if cert.NotBefore.After(time.Now()) {
|
||||
return errors.New("certificate is not valid yet")
|
||||
}
|
||||
oidMap := ExtractAllOIDValues(cert)
|
||||
|
||||
// Check if the certificate is signed by the specified CA
|
||||
|
|
|
@ -32,19 +32,23 @@ func (s *Server[T]) ListenLoop() {
|
|||
for {
|
||||
listenerConn, err := s.listener.Accept()
|
||||
if err != nil {
|
||||
log.Fatalln("Server could not accept connection")
|
||||
log.Println("Server could not accept connection")
|
||||
continue
|
||||
}
|
||||
tlsConn, ok := listenerConn.(*tls.Conn)
|
||||
if !ok {
|
||||
log.Fatalln("Connection is not a TLS connection")
|
||||
log.Println("Connection is not a TLS connection")
|
||||
continue
|
||||
}
|
||||
if err := tlsConn.Handshake(); err != nil {
|
||||
log.Fatalln(err)
|
||||
log.Println(err)
|
||||
continue
|
||||
}
|
||||
|
||||
state := tlsConn.ConnectionState()
|
||||
if len(state.PeerCertificates) == 0 {
|
||||
log.Fatalln("Client did not provide a certificate")
|
||||
log.Println("Client did not provide a certificate")
|
||||
continue
|
||||
}
|
||||
conn := NewConnection[T](tlsConn)
|
||||
s.C <- conn
|
||||
|
|
Loading…
Reference in a new issue