Am 03.07.19 um 17:44 schrieb oh...@yahoo.com.INVALID: > Hi, > Sorry about the code formatting :(... Yahoo email did that I think.... > > FYI, I use the CRL to extract/generate a file that contains the serial > numbers of all the certificates in the CRL (via "openssl crl..."). > I then prepend the path to the issuer cert (plus a comma) to each line. > I want to use the resulting CSV file as into to my Jmeter test plan, e.g., > so, eventually, I can do load testing where it is sending OCSP requests for > multiple issuing certs. > So I modified the code you posted (for the Sampler) to do that, and that is > working now. > > > Re. the JSR233 Assertion processing: > > I haven't gotten that completely working yet. > The Assertion code you provided just checks the response, which is typically > just "OK", regardless of whether the <issuer,serial number> is in the CRL or > not, but for my load test, I want to check that the response actually says > "revoked". > Here's the Assertion code that I have so far, but it is not working yet :(....
Do you have a test sample (cert id and ocsp provider) that gives a response that is "revoked"? And have you tried to look at the responseObject as I asked in my previous mail? Felix > > > //Add a JSR223 Assertion to the sampler (set to groovy,again) containing: > > import org.bouncycastle.cert.ocsp.OCSPResp; > def sR = ctx.getPreviousResult(); > byte[] instream = sR.getResponseData(); > > > > > InputStream is = new ByteArrayInputStream(instream); > > BufferedReader in1 = new BufferedReader(newInputStreamReader(is, > "ISO-8859-1")); > > > > StringBuilder logCommandOutput = new StringBuilder(); > > String line; > > while( (line = in1.readLine()) != null) { > > logCommandOutput.append(line); > > } > > in1.close(); > > log.info("RESPONSE: " +logCommandOutput.toString()); > > > > String passToAssertion = logCommandOutput.toString(); > String passedResponse = passToAssertion ; > if (passedResponse.contains("Revocation")) { > > > log.info(Thread.currentThread().getName()+":++++++++++++++++++++++ IN > ASSERTION: FOUND Revocation in Response, soPASSED!!"); > > } else { > > > log.info(Thread.currentThread().getName()+":++++++++++++++++++++++ IN > ASSERTION: DID NOT FIND Revocation in Response, soFAILED!!"); > > AssertionResult.setFailure(false); > > AssertionResult.setFailureMessage("JSR223Assertion did not > find 'Revocation'"); > > } > > The problems that I am having: > 1) It is not finding the string "Revocation" in the response, i.e., the "if > (passedResponse.contains("Revocation"))" is failing. > > I think the reason this is failing is that I am still not converting the > response into text (FYI, code, similar to above worked, in another test plan > I am working on, using "openssl ocsp" and BeanShell Sampler/Assertion), so > then the ".contains()" fails. > > 2) The code at the end, which is supposed to tell Jmeter whether or not the > Assertion failed or succeeded is not working. In particular, it is not > informing Jmeter that the Assertion failed when the Assertion fails. > > Jim > > > > > > > > > > > > > > > On Wednesday, July 3, 2019, 12:40:20 PM UTC, Felix Schumacher > <felix.schumac...@internetallee.de> wrote: > > > Am 03.07.19 um 14:12 schrieb o haya: >> Hi Felix, >> Also, here is the code you posted, but slightly modified so that it uses a >> certificate serial number in Hex when it builds the cId (this code so far >> only tests the conversion of the hex-ascii serial number to integer, and >> uses that integer serial number to call). >> I am testing this because, eventually, the test plan I need will take in a >> CSV with a bunch of cert serial numbers and send OCSP requests for those. >> import java.io.BufferedReader;import java.io.FileReader;import >> java.io.Reader; >> import org.bouncycastle.cert.ocsp.CertificateID;import >> org.bouncycastle.cert.ocsp.OCSPReq;import >> org.bouncycastle.cert.ocsp.OCSPReqBuilder;import >> org.bouncycastle.cert.X509CertificateHolder;import >> org.bouncycastle.openssl.PEMParser;import >> org.bouncycastle.operator.DigestCalculatorProvider;import >> org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; >> String fName = vars.get("certpath");Reader fR = new BufferedReader(new >> FileReader(fName));PEMParser pPar = new PEMParser(fR);X509CertificateHolder >> obj = (X509CertificateHolder)pPar.readObject();DigestCalculatorProvider dCP >> = newJcaDigestCalculatorProviderBuilder().build(); >> String certSerialNumber = >> obj.getSerialNumber();log.info("++++++++++++++++++++ certSerialNumber=[" + >> certSerialNumber + "]"); >> // Test Converting a HEX-STRING to int/biginteger, and then passing that >> into the dCP.get()...// This is a precursor to using a CSV file with Hex >> cert serial numbersint numericSerialNumber = Integer.valueOf( "35C1", >> 16);log.info("++++++++++++++++++++++ numericSerialNumber=[" + >> numericSerialNumber + "]"); >> //CertificateID cId = new CertificateID(dCP.get(CertificateID.HASH_SHA1), >> obj, obj.getSerialNumber());CertificateID cId = new >> CertificateID(dCP.get(CertificateID.HASH_SHA1), obj, numericSerialNumber); >> OCSPReq oReq = new OCSPReqBuilder().addRequest(cId).build();byte[] asn1seq = >> oReq.getEncoded();String sb = new String(asn1seq, >> "ISO-8859-1");vars.put("ocspReq", sb); > The above code is not really readable :) > > If you don't use code in your samplers, remove it. Otherwise it is > probably OK to use the cert IDs directly instead of reading them from > the certs. > > Felix > >> >> >> >> >> >> >> On Wednesday, July 3, 2019, 11:49:51 AM UTC, oh...@yahoo.com.INVALID >> <oh...@yahoo.com.INVALID> wrote: >> >> Hi Felix, >> >> Sorry for the delay. I am working with several different OCSP Responders >> and was busy trying to get one of them working. >> >> Anyway, I tested what you posted, in a new Jmeter test plan, and it worked!! >> >> Also, the Assertion succeeded, but I need to get the Assertion code to look >> into the response more. The current Assertion code checks that the response >> was "OK", but for this load test, I need to check to see if the response >> actually says "revoked", because the OCSP responder will respond "OK" even >> if it doesn't find a match for the cert I am checking. Then, I have to look >> for "revoked" or "Revocation" to confirm that I got a "positive" revocation >> from the CRL. >> >> Right now, it looks like I can get the response data/text, but it is *maybe* >> DER encoded or something. I added the following to the Assertion code you >> posted: >> >> // ADDED TO TRY TO GET RESPONSE INFORMATION... >> String responseStream = new String(instream, "ISO-8859-1"); >> log.info("+++++++++++++++++ FROM ASSERTION: responseStream=[" + >> responseStream + "]"); >> and in the Jmeter.log I am getting something that looks like DER-encoded >> information?? >> I've uploaded a screenshot of the Jmeter logging: >> New photo by O haya >> >> | >> | >> | >> | | | >> >> | >> >> | >> | >> | | >> New photo by O haya >> >> >> | >> >> | >> >> | >> >> >> >> Can I convert that encoded string in the Assertion code, to something that >> the code can then check for the word/string like "revoked" or "Revocation"? >> Thanks!Jim >> >> >> >> >> >> >> >> >> >> >> On Tuesday, July 2, 2019, 8:06:35 PM UTC, <oh...@yahoo.com.INVALID> >> wrote: >> >> Hi, >> >> Wow! Thanks! I will give this a try a little later and post back. >> >> Thanks, >> Jim >> >> >> On Tuesday, July 2, 2019, 2:55:17 PM EDT, Felix Schumacher >> <felix.schumac...@internetallee.de> wrote: >> >> I think I have got the example working. I attached a jmx file and a cert >> to this mail and maybe we are lucky and the mailing list doesn't strip >> it from the mail. >> >> In case it does: >> >> Add the variable "certpath" to your testplan (either by a cvs datasource >> for more than one cert, or via the test plan root element). It should >> point to your x509 certificates path. >> >> Add a HTTP Sampler with method POST, the "Body Data" tab selected and >> filled with "${ocspReq}". >> >> Add a JSR223 PreProcessor to the sampler (set to groovy -- the default) >> with the following content: >> >> import java.io.BufferedReader; >> import java.io.FileReader; >> import java.io.Reader; >> >> import org.bouncycastle.cert.ocsp.CertificateID; >> import org.bouncycastle.cert.ocsp.OCSPReq; >> import org.bouncycastle.cert.ocsp.OCSPReqBuilder; >> import org.bouncycastle.cert.X509CertificateHolder; >> import org.bouncycastle.openssl.PEMParser; >> import org.bouncycastle.operator.DigestCalculatorProvider; >> import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; >> >> String fName = vars.get("certpath"); >> Reader fR = new BufferedReader(new FileReader(fName)); >> PEMParser pPar = new PEMParser(fR); >> X509CertificateHolder obj = (X509CertificateHolder)pPar.readObject(); >> DigestCalculatorProvider dCP = new >> JcaDigestCalculatorProviderBuilder().build(); >> CertificateID cId = new CertificateID(dCP.get(CertificateID.HASH_SHA1), >> obj, obj.getSerialNumber()); >> OCSPReq oReq = new OCSPReqBuilder().addRequest(cId).build(); >> byte[] asn1seq = oReq.getEncoded(); >> String sb = new String(asn1seq, "ISO-8859-1"); >> vars.put("ocspReq", sb); >> >> Add a JSR223 Assertion to the sampler (set to groovy, again) containing: >> >> import org.bouncycastle.cert.ocsp.OCSPResp; >> >> def sR = ctx.getPreviousResult(); >> byte[] instream = sR.getResponseData(); >> OCSPResp oResp = new OCSPResp(instream); >> assert oResp.getStatus() ==0 >> >> Add a Header Manager to the sampler with the following set: >> >> Content-Type application/ocsp-request >> Accept application/ocsp-response >> >> It seemed to work for me (famous last words) >> >> One important change was to use "ISO-8859-1" for the encoding of the string. >> >> Felix >> >> Am 01.07.19 um 22:42 schrieb oh...@yahoo.com.INVALID: >>> Hi, >>> >>> This Java app: >>> >>> import java.io.*; >>> import java.math.BigInteger; >>> import java.security.Security; >>> import java.util.*; >>> import org.bouncycastle.cert.*; >>> import org.bouncycastle.cert.ocsp.CertificateID; >>> import org.bouncycastle.cert.ocsp.OCSPReq; >>> import org.bouncycastle.cert.ocsp.OCSPReqBuilder; >>> import org.bouncycastle.asn1.*; >>> import org.bouncycastle.openssl.*; >>> import org.bouncycastle.openssl.PEMParser; >>> import org.bouncycastle.util.io.pem.*; >>> import org.bouncycastle.pkcs.*; >>> import org.bouncycastle.operator.DigestCalculatorProvider; >>> import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; >>> >>> >>> public class jmeterdebug1 { >>> >>> public static void main(String[] args) { >>> // TODO Auto-generated method stub >>> >>> >>> String BC = "BC"; //"${securityProvider}"; >>> String fName = "E:\\Ziptemp\\CRL-DOWNLOADER\\certs\\orc_eca_sw_5.pem"; >>> //"${certpath} >>> try { >>> Reader fR = new BufferedReader(new FileReader(fName)); >>> PEMParser pPar = new PEMParser(fR); >>> >>> X509CertificateHolder obj = (X509CertificateHolder)pPar.readObject(); >>> >>> Security.addProvider(new >>> org.bouncycastle.jce.provider.BouncyCastleProvider()); >>> >>> DigestCalculatorProvider dCP = new >>> JcaDigestCalculatorProviderBuilder().setProvider(BC).build(); >>> >>> CertificateID cId = new CertificateID(dCP.get(CertificateID.HASH_SHA1), >>> obj, obj.getSerialNumber()); >>> >>> OCSPReqBuilder oRB = new OCSPReqBuilder(); >>> oRB.addRequest(cId); >>> OCSPReq oReq = oRB.build(); >>> >>> byte[] asn1seq = oReq.getEncoded(); >>> >>> String sb = new String(asn1seq); >>> >>> System.out.println("sb=[" + sb + "]"); >>> >>> } catch (Exception e) { >>> System.out.println("*** ERROR ** [" + e + "]"); >>> e.printStackTrace(); >>> } >>> >>> //sampler.getArguments().getArgument(0).setValue(sb); >>> >>> >>> >>> } >>> >>> } >>> >>> >>> Outputs: >>> >>> sb=[0B0@0>0<0:0 + >>> >>> >>> So I am guessing that the 'sb' is supposed to be used to populate the POST >>> body via the line that I have commented out above >>> ("sampler.getArguments().getArgument(0).setValue(sb);")?? >>> >>> >>> So if I just uncomment that line in the equivalent code in the Jmeter >>> Beanshell Preprocessor code, is there something additional that I need to >>> do to get the HTTP request to use that for the BODY? >>> >>> Also, FYI, I added several Debug listeners, but I don't see any variable >>> named "sb" in their output? What do I need to do so that I can see the >>> contents of that var in the Debug? >>> >>> >>> >>> Thanks, >>> Jim >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> On Monday, July 1, 2019, 4:01:41 PM EDT, Felix Schumacher >>> <felix.schumac...@internetallee.de> wrote: >>> >>> >>> >>> Am 1. Juli 2019 21:49:37 MESZ schrieb oh...@yahoo.com.INVALID: >>>> Hi, >>>> >>>> Hmm. It seems like the example test plan isn't as complete as I had >>>> hoped :(.... >>>> >>>> FYI, I think the reference to "the public key infrastructure" is to >>>> another bouncycastle package, "bcpkix-jdk15on-162.jar". >>> Seems sensible. >>> >>>> FYI, I am going to try to get this working/debug this as a Java app >>>> first, and then I can try to make a groovy version after that, once it >>>> is clean. I'm hoping that that makes it easier for me, initially. >>> Small steps is a good way to go. >>> >>>> I will post back in a bit... >>> Great >>> Felix >>> >>>> Jim >>>> >>>> >>>> >>>> On Monday, July 1, 2019, 2:46:59 PM EDT, Felix Schumacher >>>> <felix.schumac...@internetallee.de> wrote: >>>> >>>> >>>> Am 01.07.19 um 19:16 schrieb oh...@yahoo.com.INVALID: >>>>> Hi, >>>>> >>>>> I am trying to implement a Jmeter load test for an OCSP responder, >>>> and I found this page, but haven't been able to get it working: >>>>> https://www.blazemeter.com/blog/how-load-test-ocsp-jmeter/ >>>>> >>>>> - The first problem that I ran into is where it says "2. Download the >>>> public key infrastructure and provider ". The link for the "provider" >>>> works and allows me to download "bcprov-jdk15on-156.jar", but I am not >>>> sure what the "the public key infrastructure" is supposed to download? >>>> I think that the "public key infrastructure" means your certificates. >>>> If >>>> you download the bouncycastle provider, you probably should take the >>>> newest version of it: https://bouncycastle.org/latest_releases.html >>>>> - Also, for the HTTP Request element, it says "The URL of the >>>> responder is defined in the variable section of the script.", but I am >>>> not sure what it is referring to when it says "the variable section of >>>> the script"? >>>> >>>> I guess that the "user defined variables" table on the test plan (root) >>>> element is meant. But on the other hand, the text misses to add a >>>> variable reference on the http sampler (my guess is, that it is hidden >>>> in the http defaults element, that are not described further in the >>>> text), so you are free to add your URL to the http sampler yourself. >>>> >>>> And now to a few things you haven't asked :) >>>> >>>> * Use groovy instead of beanshell whenever possible. >>>> >>>> * Don't use ${...} inside JSR223 or other Shell Samplers. Use >>>> vars.get("...") instead >>>> >>>> * Instead of >>>> >>>> Failure = false; >>>> if (oResp.getStatus() != 0) { >>>> Failure = true; >>>> >>>> } >>>> >>>> you could use >>>> >>>> Failure = oResp.getStatus() != 0; >>>> >>>> or if you feel groovy: Failure = oResp.status != 0 >>>> >>>> >>>>> Is anyone familiar with this test plan, and gotten it working? >>>> Note, that I have no OCSP server and thus have not tried to get it >>>> really working. >>>> >>>> Felix >>>> >>>>> Thanks, >>>>> Jim >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org >>>>> For additional commands, e-mail: user-h...@jmeter.apache.org >>>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org >>>> For additional commands, e-mail: user-h...@jmeter.apache.org >>>> >>>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org >>> For additional commands, e-mail: user-h...@jmeter.apache.org >>> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org >> For additional commands, e-mail: user-h...@jmeter.apache.org > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org > For additional commands, e-mail: user-h...@jmeter.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@jmeter.apache.org For additional commands, e-mail: user-h...@jmeter.apache.org