Skip to content

Commit 68571ff

Browse files
committed
Address PR comments
1 parent 1c1988f commit 68571ff

File tree

4 files changed

+39
-74
lines changed

4 files changed

+39
-74
lines changed

security/advancedtls/crl.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ func fetchIssuerCRL(rawIssuer []byte, crlVerifyCrt []*x509.Certificate, cfg Revo
285285
return nil, fmt.Errorf("fetchCRL() failed: %v", err)
286286
}
287287

288-
if err := verifyCRL(crl, rawIssuer, crlVerifyCrt); err != nil {
288+
if err := verifyCRL(crl, crlVerifyCrt); err != nil {
289289
return nil, fmt.Errorf("verifyCRL() failed: %v", err)
290290
}
291291
if cfg.Cache != nil {
@@ -303,7 +303,7 @@ func fetchCRL(c *x509.Certificate, crlVerifyCrt []*x509.Certificate, cfg Revocat
303303
if crl == nil {
304304
return nil, fmt.Errorf("no CRL found for certificate's issuer")
305305
}
306-
if err := verifyCRL(crl, nil, crlVerifyCrt); err != nil {
306+
if err := verifyCRL(crl, crlVerifyCrt); err != nil {
307307
return nil, fmt.Errorf("verifyCRL() failed: %v", err)
308308
}
309309
return crl, nil
@@ -325,7 +325,7 @@ func checkCert(c *x509.Certificate, crlVerifyCrt []*x509.Certificate, cfg Revoca
325325
// know if it's RevocationUnrevoked or not. This is not necessarily a
326326
// problem - it's not invalid to have no CRLs if you don't have any
327327
// revocations for an issuer. It also might be an indication that the CRL
328-
// file to is invalid.
328+
// file is invalid.
329329
// We just return RevocationUndetermined and there is a setting for the user
330330
// to control the handling of that.
331331
grpclogLogger.Warningf("fetchCRL() err = %v", err)
@@ -541,7 +541,7 @@ func fetchCRLOpenSSLHashDir(rawIssuer []byte, cfg RevocationConfig) (*CRL, error
541541
return parsedCRL, nil
542542
}
543543

544-
func verifyCRL(crl *CRL, rawIssuer []byte, chain []*x509.Certificate) error {
544+
func verifyCRL(crl *CRL, chain []*x509.Certificate) error {
545545
// RFC5280, 6.3.3 (f) Obtain and validate the certification path for the issuer of the complete CRL
546546
// We intentionally limit our CRLs to be signed with the same certificate path as the certificate
547547
// so we can use the chain from the connection.

security/advancedtls/crl_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -515,7 +515,7 @@ func TestVerifyCrl(t *testing.T) {
515515

516516
for _, tt := range verifyTests {
517517
t.Run(tt.desc, func(t *testing.T) {
518-
err := verifyCRL(tt.crl, tt.cert.RawIssuer, tt.certs)
518+
err := verifyCRL(tt.crl, tt.certs)
519519
switch {
520520
case tt.errWant == "" && err != nil:
521521
t.Errorf("Valid CRL did not verify err = %v", err)

security/advancedtls/testdata/crl/README.md

Lines changed: 25 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ Certificate chain where the leaf is revoked
4949

5050
## Test Data for testing CRL providers functionality
5151

52-
To generate test data please follow the steps below or run provider_create.sh
53-
script. All the files have `provider_` prefix.
52+
To generate test data please run provider_create.sh script. All the files have
53+
`provider_` prefix.
5454

5555
We need to generate the following artifacts for testing CRL provider:
5656
* server self signed CA cert
@@ -62,73 +62,31 @@ We need to generate the following artifacts for testing CRL provider:
6262
* crl file by 'malicious' CA which contains the same issuer with original CA
6363

6464

65-
Please find the related commands below.
65+
All the commands are provided in provider_create.sh script. Please find the
66+
description below.
6667

67-
* Generate self signed CAs
68-
```
69-
$ openssl req -x509 -newkey rsa:4096 -keyout provider_server_trust_key.pem -out provider_server_trust_cert.pem -days 365 -subj "/C=US/ST=VA/O=Internet Widgits Pty Ltd/CN=foo.bar.hoo.ca.com" -nodes
70-
$ openssl req -x509 -newkey rsa:4096 -keyout provider_client_trust_key.pem -out provider_client_trust_cert.pem -days 365 -subj "/C=US/ST=CA/L=SVL/O=Internet Widgits Pty Ltd" -nodes
71-
```
72-
73-
* Generate client and server certs signed by CAs
74-
```
75-
$ openssl req -newkey rsa:4096 -keyout provider_server_cert.key -out provider_new_cert.csr -nodes -subj "/C=US/ST=CA/L=DUMMYCITY/O=Internet Widgits Pty Ltd/CN=foo.bar.com" -sha256
76-
$ openssl x509 -req -in provider_new_cert.csr -out provider_server_cert.pem -CA provider_client_trust_cert.pem -CAkey provider_client_trust_key.pem -CAcreateserial -days 3650 -sha256 -extfile provider_extensions.conf
68+
1. The first two commands generate self signed CAs for client and server:
69+
- provider_server_trust_key.pem
70+
- provider_server_trust_cert.pem
71+
- provider_client_trust_key.pem
72+
- provider_client_trust_cert.pem
7773

78-
$ openssl req -newkey rsa:4096 -keyout provider_client_cert.key -out provider_new_cert.csr -nodes -subj "/C=US/ST=CA/O=Internet Widgits Pty Ltd/CN=foo.bar.hoo.com" -sha256
79-
$ openssl x509 -req -in provider_new_cert.csr -out provider_client_cert.pem -CA provider_server_trust_cert.pem -CAkey provider_server_trust_key.pem -CAcreateserial -days 3650 -sha256 -extfile provider_extensions.conf
80-
```
81-
82-
Here is the content of `provider_extensions.conf` -
83-
```
84-
[extensions]
85-
subjectKeyIdentifier = hash
86-
authorityKeyIdentifier = keyid,issuer
87-
basicConstraints = CA:FALSE
88-
keyUsage = digitalSignature, keyEncipherment
89-
```
74+
2. Generate client and server certs signed by the CAs above:
75+
- provider_server_cert.pem
76+
- provider_client_cert.pem
9077

91-
* Generate CRLs
92-
For CRL generation we need 2 more files called `index.txt` and `crlnumber.txt`:
93-
```
94-
$ echo "1000" > provider_crlnumber.txt
95-
$ touch provider_index.txt
96-
```
97-
Also we need another config `provider_crl.cnf` -
98-
```
99-
[ ca ]
100-
default_ca = my_ca
101-
102-
[ my_ca ]
103-
crl = crl.pem
104-
default_md = sha256
105-
database = provider_index.txt
106-
crlnumber = provider_crlnumber.txt
107-
default_crl_days = 30
108-
default_crl_hours = 1
109-
crl_extensions = crl_ext
110-
111-
[crl_ext]
112-
# Authority Key Identifier extension
113-
authorityKeyIdentifier=keyid:always,issuer:always
114-
```
78+
3. The next 2 commands create 2 files needed for CRL issuing:
79+
- provider_crlnumber.txt
80+
- provider_index.txt
11581

116-
The commands to generate empty CRL file and CRL file containing revoked server
117-
cert are below.
118-
```
119-
$ openssl ca -gencrl -keyfile provider_client_trust_key.pem -cert provider_client_trust_cert.pem -out provider_crl_empty.pem -config provider_crl.cnf
120-
$ openssl ca -revoke provider_server_cert.pem -keyfile provider_client_trust_key.pem -cert provider_client_trust_cert.pem -config provider_crl.cnf
121-
$ openssl ca -gencrl -keyfile provider_client_trust_key.pem -cert provider_client_trust_cert.pem -out provider_crl_server_revoked.pem -config provider_crl.cnf
122-
```
82+
4. The next 3 commands generate an empty CRL file and a CRL file containing
83+
revoked server cert:
84+
- provider_crl_empty.pem
85+
- provider_crl_server_revoked.pem
12386

124-
The commands to generate CRL file by 'malicious' CA are below. Note that we use
125-
Subject Key Identifier from previously generated provider_client_trust_cert.pem
126-
to generate malicious certs / CRL.
127-
```
128-
$ openssl genrsa -out provider_malicious_client_trust_key.pem 4096
129-
$ SKI=$(openssl x509 -in provider_client_trust_cert.pem -noout -text | awk '/Subject Key Identifier/ {getline; print $1;}')
130-
$ sed -i "s/subjectKeyIdentifier = X/subjectKeyIdentifier = $SKI/g" provider_extensions.conf
131-
$ openssl req -new -key provider_malicious_client_trust_key.pem -out cert_malicious_request.csr -subj "/C=US/ST=CA/L=SVL/O=Internet Widgits Pty Ltd" -config provider_extensions.conf
132-
$ openssl x509 -req -in cert_malicious_request.csr -signkey provider_malicious_client_trust_key.pem -out provider_malicious_client_trust_cert.pem -days 365 -extfile provider_extensions.conf -extensions extensions
133-
$ openssl ca -gencrl -keyfile provider_malicious_client_trust_key.pem -cert provider_malicious_client_trust_cert.pem -out provider_malicious_crl_empty.pem -config provider_crl.cnf
134-
```
87+
5. The final section contains commands to generate CRL file by 'malicious' CA.
88+
Note that we use Subject Key Identifier from previously created
89+
provider_client_trust_cert.pem to generate malicious certs / CRL.
90+
- provider_malicious_client_trust_key.pem
91+
- provider_malicious_client_trust_cert.pem
92+
- provider_malicious_crl_empty.pem

security/advancedtls/testdata/crl/provider_create.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/bin/bash
22

33
# The script contains a sequence of commands described in README.md
4+
# Generate client/server self signed CAs and certs.
45
openssl req -x509 \
56
-newkey rsa:4096 \
67
-keyout provider_server_trust_key.pem \
@@ -51,10 +52,14 @@ openssl x509 -req \
5152
-sha256 \
5253
-extfile provider_extensions.conf
5354

55+
# Generate files need for CRL issuing.
56+
5457
echo "1000" > provider_crlnumber.txt
5558

5659
touch provider_index.txt
5760

61+
# Generate two CRLs.
62+
5863
openssl ca -gencrl \
5964
-keyfile provider_client_trust_key.pem \
6065
-cert provider_client_trust_cert.pem \
@@ -72,15 +77,17 @@ openssl ca -gencrl \
7277
-out provider_crl_server_revoked.pem \
7378
-config provider_crl.cnf
7479

80+
# Generate malicious CRLs.
81+
7582
openssl genrsa \
7683
-out provider_malicious_client_trust_key.pem 4096
7784

78-
SKI=$(openssl x509 -in provider_client_trust_cert.pem \
85+
SubjectKeyIdentifier=$(openssl x509 -in provider_client_trust_cert.pem \
7986
-noout \
8087
-text \
8188
| awk '/Subject Key Identifier/ {getline; print $1;}')
8289

83-
sed -i "s/subjectKeyIdentifier = hash/subjectKeyIdentifier = $SKI/g" \
90+
sed -i "s/subjectKeyIdentifier = hash/subjectKeyIdentifier = $SubjectKeyIdentifier/g" \
8491
provider_extensions.conf
8592

8693
openssl req -new \

0 commit comments

Comments
 (0)