Commit 7700fcba authored by Kamil Dudka's avatar Kamil Dudka
Browse files

nss: refuse previously loaded certificate from file

... when we are not asked to use a certificate from file
parent 822082d8
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ This release includes the following bugfixes:
 o SOCKS: display the hostname returned by the SOCKS5 proxy server
 o SOCKS: display the hostname returned by the SOCKS5 proxy server
 o sasl: Don't use GSSAPI authentication when domain name not specified [16]
 o sasl: Don't use GSSAPI authentication when domain name not specified [16]
 o win: Basic support for Universal Windows Platform apps [17]
 o win: Basic support for Universal Windows Platform apps [17]
 o nss: fix incorrect use of a previously loaded certificate from file


This release includes the following known bugs:
This release includes the following known bugs:


+7 −1
Original line number Original line Diff line number Diff line
@@ -1002,10 +1002,10 @@ static SECStatus SelectClientCert(void *arg, PRFileDesc *sock,
  struct ssl_connect_data *connssl = (struct ssl_connect_data *)arg;
  struct ssl_connect_data *connssl = (struct ssl_connect_data *)arg;
  struct Curl_easy *data = connssl->data;
  struct Curl_easy *data = connssl->data;
  const char *nickname = connssl->client_nickname;
  const char *nickname = connssl->client_nickname;
  static const char pem_slotname[] = "PEM Token #1";


  if(connssl->obj_clicert) {
  if(connssl->obj_clicert) {
    /* use the cert/key provided by PEM reader */
    /* use the cert/key provided by PEM reader */
    static const char pem_slotname[] = "PEM Token #1";
    SECItem cert_der = { 0, NULL, 0 };
    SECItem cert_der = { 0, NULL, 0 };
    void *proto_win = SSL_RevealPinArg(sock);
    void *proto_win = SSL_RevealPinArg(sock);
    struct CERTCertificateStr *cert;
    struct CERTCertificateStr *cert;
@@ -1067,6 +1067,12 @@ static SECStatus SelectClientCert(void *arg, PRFileDesc *sock,
  if(NULL == nickname)
  if(NULL == nickname)
    nickname = "[unknown]";
    nickname = "[unknown]";


  if(!strncmp(nickname, pem_slotname, sizeof(pem_slotname) - 1U)) {
    failf(data, "NSS: refusing previously loaded certificate from file: %s",
          nickname);
    return SECFailure;
  }

  if(NULL == *pRetKey) {
  if(NULL == *pRetKey) {
    failf(data, "NSS: private key not found for certificate: %s", nickname);
    failf(data, "NSS: private key not found for certificate: %s", nickname);
    return SECFailure;
    return SECFailure;