Files
roytam1 7e7ba08548 import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1119049 - Keyboard shortcuts should work in MediaDocuments without explicitly focusing the media element. r=bz (46be3d5343)
- fix (3ade1708af)
- Bug 967982 - Show findbar after unsuccessful Find Again [r=mikedeboer] (8f228f14a1)
- Bug 1071631 - fix findbar re-filling in last character, r=mikedeboer (1dcea48088)
- Bug 1214249 - Set MOZ_FLOAT_ABI in armv6 case r=glandium (8c53df59f6)
- Bug 1223093 - Bump required rustc version to 1.4. r=mshal (2e116f0dc6)
- Bug 1208566 - require Rust 1.5 for --enable-rust builds; r=mshal (091c824772)
- bump gcc version to 4.4 and use e.g. MacPorts gcc for safety (1af814d7bd)
- reorder and fix (c74b24dfbf)
- Bug 1043112 - Allow b2g to core dump when signal permits. r=jld (f5afeb0051)
- Bug 1190965 - Restrict syscalls in nsProfileLock to Linux. r=jld (9ac892b4eb)
- Bug 1227569 - Remove unsupported OpenVMS code. r=mccr8 (ea080668c9)
- Bug 1227248 - Part 1: Allow extending StrictOrderingOnAppendListWithFlags. r=gps (52260fd46d)
- Bug 1163358 - Add "psm" tag to PSM xpcshell and mochitest manifests. r=dkeeler (aa31fa4e2f)
- Bug 1167254 - Convert test_bug234856.html mochitest to an xpcshell test. r=keeler (1f20c9f997)
- Bug 1169195 - Convert test_bug644006.html mochitest to an xpcshell test. r=keeler (f391df2ed5)
- bug 1181376 - convert test_bug480619.html to an xpcshell test r=mgoodwin (3bb1a3b762)
- Bug 1167866 - Add result strings to PSM test_cert* xpcshell tests. r=keeler (74743ab236)
- Bug 1171819 - Convert test_cert_eku-*.js to generate certificates at build time. r=keeler (9aea62b0dc)
- bug 1203312 - split tlsserver certificates into ocsp_certs and bad_certs r=mgoodwin (599437ece7)
- bug 1209695 - fold mochitest test_bug413909.html into xpcshell test_cert_overrides.js r=mgoodwin (cd5769201b)
- bug 1187029 - convert test_bug480509.html to an xpcshell test r=jcj (966cb02692)
- bug 1174292 - convert test_cert_version.js to generate certificates at build time r=Cykesiopka (7acb99f5ee)
- bug 1173565 - convert test_pinning_dynamic.js to generate certificates at build time r=Cykesiopka (cf5844376a)
- bug 1178988 - convert test_ocsp_url to generate certificates at build time r=Cykesiopka (de5554cb7b)
- bug 1189427 - convert test_ocsp_fetch_method.js to generate certificates at build time r=mgoodwin (9955a340fa)
- bug 1194013 - convert test_name_constraints.js to generate certificates at build time r=Cykesiopka,mgoodwin (0060e4232f)
- bug 1196853 - convert test_cert_signatures.js to generate certificat s at build time r=jcj (ce0ab9e63a)
- bug 1190603 - convert test_keysize.js to generate certificates at build time r=Cykesiopka (3dd9972c8f)
- Bug 1228794 - Convert test_getchain.js to generate certificates at build time. r=keeler (cf6b4d3c47)
- Bug 901698 - Some tests for OCSP-must-staple; r=keeler (4f51b34bee)
- Bug 1179678 - Add result strings to misc PSM xpcshell tests. r=keeler (a2142e0ca1)
- Bug 1205962 - Address some pylint complaints about pycert.py and pykey.py, r=keeler (190cdb0e4a)
- Bug 1218999 - Back out changeset 5f32b2bcfa43 (bug 1188468) in favor of a more efficient solution. r=glandium (195e060c30)
- Bug 1222903 - Reject EV status for EV EE certs that are valid for longer than 27 months as well. r=keeler (811b0bcc46)
- Bug 1231315 - Build CONFIGURE_DEFINE_FILES at build time instead of during configure. r=gps (5242734649)
- gradle remove (b745c7b2e4)
- Bug 1232421 - force matching the start of the line for comments, r=glandium (de93f61f91)
- Bug 1232421 - followup: fix test to not use 'inline comments' which are not supported elsewhere, rs=bustage on a CLOSED TREE (9e34a9d721)
- Bug 1172645 - Make mozbuild's setup.py work; r=glandium (b73b656574)
- bug 1166976 - add pyasn1-modules python library r=ted,gerv (24c7f3253f)
- bug 1166976 - add Python-RSA python library r=ted,gerv (9628d1583f)
- bug 1166976 - generate some PSM xpcshell test certificates at build time r=Cykesiopka,mgoodwin,froydnj (af4744b19d)
- Bug 1224478 - Replace do_check_* calls with their Assert.jsm equivalents in PSM xpcshell tests. r=keeler (6846617e65)
- bug 975763 - move test_certificate_overrides.html to test_cert_override_bits_mismatches.js r=mgoodwin (4ba930e064)
- Bug 1171820 - Convert test_bug483440.html mochitest to an xpcshell test. r=keeler (d41a63cd13)
- Bug 1147726: Disable test_keysize_ev.js on slow B2G Emulator debug builds. r=dkeeler (df54c1bbc8)
- Bug 1147725 - Disable test_ocsp_fetch_method.js and test_ocsp_url.js on slow B2G Emulator debug builds. r=keeler (56e71d8d7f)
- bug 1081128 - test_pinning.js takes ~300 seconds on b2g debug emulator - request a longer timeout for it r=Cykesiopka (20ecf7ca8b)
- Bug 1145679 - Part 2 - Tests. r=keeler (046b88cd37)
- Bug 1227248 - Part 2: Add GeneratedTest{Certificate,Key} mozbuild templates. r=gps (810848b3bc)
- Bug 1227248 - Part 3: Make GeneratedTest{Certificate,Key} no-op when --disable-compile-environment. r=gps (563c26d64b)
- Bug 1130413 - Remove unused nsITokenPasswordDialogs::GetPassword() function. r=jjones (0cff903788)
- Bug 1157515 - CipherSuiteChangeObserver should clean itself up. r=keeler (e9175e8f89)
- Bug 1215779 - Remove broken (non-EC) DSA keygen code. r=keeler (98a09304c1)
- bug 1215270 - remove some unused functions from nsNSSShutDown.h r=Cykesiopka (ea0e9566f2)
- bug 1215690 - remove nsPSMUITracker r=Cykesiopka r=mgoodwin (98ea9b8481)
- bug 1205767 - prevent memory leak when generating an EC key with <keygen> r=ttaubert (3be4b5f545)
- Bug 488480 - Correct documentation about the function hasMatchingOverride() in nsICertOverrideService.idl. Original patch by Johnathan Nightingale. r=keeler (bf2b16f2c0)
- Bug 629558 - Pref to make Intermediate Cert Store memory-only. r=keeler (19632e2fd6)
- typo (86093804e3)
- Bug 278689 - Multiple Certificates with the same subject are not shown in the digital signature select cert combo (only one is shown) r=dkeeler (c5984b6857)
2023-07-06 10:17:46 +08:00

144 lines
4.7 KiB
Python

#!/usr/bin/python
#
from pyasn1.codec.der import decoder, encoder
from pyasn1_modules import rfc2560, rfc2459, pem
from pyasn1.type import univ
import sys, hashlib
try:
import urllib2
except ImportError:
import urllib.request as urllib2
sha1oid = univ.ObjectIdentifier((1, 3, 14, 3, 2, 26))
class ValueOnlyBitStringEncoder(encoder.encoder.BitStringEncoder):
# These methods just do not encode tag and length fields of TLV
def encodeTag(self, *args): return ''
def encodeLength(self, *args): return ''
def encodeValue(*args):
substrate, isConstructed = encoder.encoder.BitStringEncoder.encodeValue(*args)
# OCSP-specific hack follows: cut off the "unused bit count"
# encoded bit-string value.
return substrate[1:], isConstructed
def __call__(self, bitStringValue):
return self.encode(None, bitStringValue, defMode=1, maxChunkSize=0)
valueOnlyBitStringEncoder = ValueOnlyBitStringEncoder()
def mkOcspRequest(issuerCert, userCert):
issuerTbsCertificate = issuerCert.getComponentByName('tbsCertificate')
issuerSubject = issuerTbsCertificate.getComponentByName('subject')
userTbsCertificate = userCert.getComponentByName('tbsCertificate')
userIssuer = userTbsCertificate.getComponentByName('issuer')
assert issuerSubject == userIssuer, '%s\n%s' % (
issuerSubject.prettyPrint(), userIssuer.prettyPrint()
)
userIssuerHash = hashlib.sha1(
encoder.encode(userIssuer)
).digest()
issuerSubjectPublicKey = issuerTbsCertificate.getComponentByName('subjectPublicKeyInfo').getComponentByName('subjectPublicKey')
issuerKeyHash = hashlib.sha1(
valueOnlyBitStringEncoder(issuerSubjectPublicKey)
).digest()
userSerialNumber = userTbsCertificate.getComponentByName('serialNumber')
# Build request object
request = rfc2560.Request()
reqCert = request.setComponentByName('reqCert').getComponentByName('reqCert')
hashAlgorithm = reqCert.setComponentByName('hashAlgorithm').getComponentByName('hashAlgorithm')
hashAlgorithm.setComponentByName('algorithm', sha1oid)
reqCert.setComponentByName('issuerNameHash', userIssuerHash)
reqCert.setComponentByName('issuerKeyHash', issuerKeyHash)
reqCert.setComponentByName('serialNumber', userSerialNumber)
ocspRequest = rfc2560.OCSPRequest()
tbsRequest = ocspRequest.setComponentByName('tbsRequest').getComponentByName('tbsRequest')
tbsRequest.setComponentByName('version', 'v1')
requestList = tbsRequest.setComponentByName('requestList').getComponentByName('requestList')
requestList.setComponentByPosition(0, request)
return ocspRequest
def parseOcspRequest(ocspRequest):
tbsRequest = ocspRequest['responseStatus']
assert responseStatus == rfc2560.OCSPResponseStatus('successful'), responseStatus.prettyPrint()
responseBytes = ocspResponse.getComponentByName('responseBytes')
responseType = responseBytes.getComponentByName('responseType')
assert responseType == id_pkix_ocsp_basic, responseType.prettyPrint()
response = responseBytes.getComponentByName('response')
basicOCSPResponse, _ = decoder.decode(
response, asn1Spec=rfc2560.BasicOCSPResponse()
)
tbsResponseData = basicOCSPResponse.getComponentByName('tbsResponseData')
response0 = tbsResponseData.getComponentByName('responses').getComponentByPosition(0)
return (
tbsResponseData.getComponentByName('producedAt'),
response0.getComponentByName('certID'),
response0.getComponentByName('certStatus').getName(),
response0.getComponentByName('thisUpdate')
)
if len(sys.argv) != 2:
print("""Usage:
$ cat CACertificate.pem userCertificate.pem | %s <ocsp-responder-url>""" % sys.argv[0])
sys.exit(-1)
else:
ocspUrl = sys.argv[1]
# Parse CA and user certificates
issuerCert, _ = decoder.decode(
pem.readPemFromFile(sys.stdin)[1],
asn1Spec=rfc2459.Certificate()
)
userCert, _ = decoder.decode(
pem.readPemFromFile(sys.stdin)[1],
asn1Spec=rfc2459.Certificate()
)
# Build OCSP request
ocspReq = mkOcspRequest(issuerCert, userCert)
# Use HTTP POST to get response (see Appendix A of RFC 2560)
# In case you need proxies, set the http_proxy env variable
httpReq = urllib2.Request(
ocspUrl,
encoder.encode(ocspReq),
{ 'Content-Type': 'application/ocsp-request' }
)
httpRsp = urllib2.urlopen(httpReq).read()
# Process OCSP response
ocspRsp, _ = decoder.decode(httpRsp, asn1Spec=rfc2560.OCSPResponse())
producedAt, certId, certStatus, thisUpdate = parseOcspResponse(ocspRsp)
print('Certificate ID %s is %s at %s till %s\n' % (
certId.getComponentByName('serialNumber'),
certStatus,
producedAt,
thisUpdate
))