The API request used to “downloadRevocationRequests” accepts two parameters, and neither of which work as expected. Furthermore, the Endpoint being queried is not documented and doesn’t appear to have any pagination features.
Request Parameter: issuerName:
Expected Behavior: Should return a list of certificates to be revoked which were issued by the “issuerName”.
Actual Behavior: issuerName maps to caConfiguration.
Concerns about fixing: All existing integrations between InTune and 3rd Party SCEP Certificate Authorities rely on this incorrect mapping. Any existing integration which makes use of this parameter will need to be updated should the behavior of the API be corrected.
Request Parameter: maxRequests:
Expected Behavior: Submitting a request with both "issuerName" and "maxRequests" defined should return a list of certificates issued by "issuerName". The list should contain at most "maxRequests" certificates for revocation.
Actual Behavior: It appears like the order of operations on the back-end is incorrect. “issuerName” filtering seems to be getting applied only after truncating the response to based on the value of “maxRequests”. A result of the above behavior is that the list of "CARevocationRequests" returned to the 3rd Party SCEP Certificate Authority may be "empty" instead of actually containing a list of certificates to revoke.
Reason why this needs to be fixed: Revoked certificates should never be used. The moment a Certificate is marked for revocation, the Certificate Authority has a responsibility to actually revoke that certificate, and furthermore to notify all clients of the revocation using methods such as CRLs or OCSP. If a Certificate Authority lacks the ability to reliably know which certificate need to be revoked, then the certificates issued from that Certificate Authority cannot be trusted.
Samples
maxRequests=10.
issuerName=testb3d9b17c51~testroot
Expected Response given the fact that issuerName is mismatched: A list of 4 certificates to be revoked.
Actual Response: 0 Certificates (empty response).
maxRequests=500.
issuerName=testb3d9b17c51~testroot
Expected Response given the fact that issuerName is mismatched: A list of 4 certificates to be revoked.
Actual Response: A list of 4 certificates to be revoked.
We were left with the following questions after experiencing the above behavior:
Why does a request of maxResults=10 return with a list of 0 certificates, but a request with maxResults=500 returns with a list of 4 certificates. Our assumption was that this is due to an error with the order of operations (truncating before filtering) in the backend.
If there is actually an issue with regards to the order of operations (i.e. truncating the list prior to filtering the list), then how can we guarantee that the list returned for maxRequest=500 is actually the full list of certificates? There doesn't appear to be any kind of pagination feature for this API endpoint... does one exist?
Where is the documentation for the StatelessPkiConnectorService?
Problems
The API request used to “downloadRevocationRequests” accepts two parameters, and neither of which work as expected. Furthermore, the Endpoint being queried is not documented and doesn’t appear to have any pagination features.
Request Parameter: issuerName:
Request Parameter: maxRequests:
Samples
maxRequests=10. issuerName=testb3d9b17c51~testroot Expected Response given the fact that issuerName is mismatched: A list of 4 certificates to be revoked. Actual Response: 0 Certificates (empty response).
maxRequests=500. issuerName=testb3d9b17c51~testroot Expected Response given the fact that issuerName is mismatched: A list of 4 certificates to be revoked. Actual Response: A list of 4 certificates to be revoked.
Questions
We were left with the following questions after experiencing the above behavior: