📄 protocolhttptest.java
字号:
/************************************************************************* * * * EJBCA: The OpenSource Certificate Authority * * * * This software is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or any later version. * * * * See terms of license at gnu.org. * * * *************************************************************************/ package se.anatom.ejbca.protocol.junit;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStreamReader;import java.math.BigInteger;import java.rmi.RemoteException;import java.security.KeyPair;import java.security.KeyPairGenerator;import java.security.cert.X509Certificate;import java.security.interfaces.RSAPrivateKey;import java.util.Collection;import java.util.Date;import java.util.Iterator;import javax.ejb.DuplicateKeyException;import javax.naming.Context;import javax.naming.NamingException;import org.apache.log4j.Logger;import org.bouncycastle.ocsp.BasicOCSPResp;import org.bouncycastle.ocsp.CertificateID;import org.bouncycastle.ocsp.OCSPReq;import org.bouncycastle.ocsp.OCSPReqGenerator;import org.bouncycastle.ocsp.OCSPResp;import org.bouncycastle.ocsp.RespData;import org.bouncycastle.ocsp.RevokedStatus;import org.bouncycastle.ocsp.SingleResp;import org.bouncycastle.ocsp.UnknownStatus;import junit.framework.*;import com.meterware.httpunit.*;import se.anatom.ejbca.SecConst;import se.anatom.ejbca.util.CertTools;import se.anatom.ejbca.ca.caadmin.CAInfo;import se.anatom.ejbca.ca.caadmin.ICAAdminSessionHome;import se.anatom.ejbca.ca.caadmin.ICAAdminSessionRemote;import se.anatom.ejbca.ca.crl.RevokedCertInfo;import se.anatom.ejbca.ca.sign.ISignSessionHome;import se.anatom.ejbca.ca.sign.ISignSessionRemote;import se.anatom.ejbca.ca.store.CertificateData;import se.anatom.ejbca.ca.store.CertificateDataHome;import se.anatom.ejbca.ca.store.CertificateDataPK;import se.anatom.ejbca.log.Admin;import se.anatom.ejbca.protocol.ScepRequestMessage;import se.anatom.ejbca.ra.UserDataHome;import se.anatom.ejbca.ra.UserDataPK;import se.anatom.ejbca.ra.UserDataRemote;import se.anatom.ejbca.util.Base64;/** Tests http pages of ocsp and scep **/public class ProtocolHttpTest extends TestCase { private static Logger log = Logger.getLogger(TestMessages.class); private static final String httpReqPath = "http://127.0.0.1:8080/ejbca"; private static final String resourceOcsp = "publicweb/status/ocsp"; private static final String resourceScep = "publicweb/apply/scep/pkiclient.exe"; static byte[] openscep = Base64.decode(("MIIGqwYJKoZIhvcNAQcCoIIGnDCCBpgCAQExDjAMBggqhkiG9w0CBQUAMIICuwYJ" + "KoZIhvcNAQcBoIICrASCAqgwggKkBgkqhkiG9w0BBwOgggKVMIICkQIBADGB1TCB" + "0gIBADA7MC8xDzANBgNVBAMTBlRlc3RDQTEPMA0GA1UEChMGQW5hVG9tMQswCQYD" + "VQQGEwJTRQIIbzEhUVZYO3gwDQYJKoZIhvcNAQEBBQAEgYCksIoSXYsCQPot2DDW" + "dexdFqLj1Fuz3xSpu/rLozXKxEY0n0W0JXRR9OxxuyqNw9cLZhiyWkNsJGbP/rEz" + "yrXe9NXuLK5U8+qqE8OhnY9BhCxjeUJSLni6oCSi7YzwOqdg2KmifJrQQI/jZIiC" + "tSISAtE6qi6DKQwLCkQLmokLrjCCAbIGCSqGSIb3DQEHATARBgUrDgMCBwQILYvZ" + "rBWuC02AggGQW9o5MB/7LN4o9G4ZD1l2mHzS+g+Y/dT2qD/qIaQi1Mamv2oKx9eO" + "uFtaGkBBGWZlIKg4mm/DFtvXqW8Y5ijAiQVHHPuRKNyIV6WVuFjNjhNlM+DWLJR+" + "rpHEhvB6XeDo/pd+TyOKFcxedMPTD7U+j46yd46vKdmoKAiIF21R888uVSz3GDts" + "NlqgvZ7VlaI++Tj7aPdOI7JTdQXZk2FWF7Ql0LBIPwk9keffptF5if5Y+aHqB0a2" + "uQj1aE8Em15VG8p8MmLJOX0OA1aeqfxR0wk343r44UebliY2DE8cEnym/fmya30/" + "7WYzJ7erWofO2ukg1yc93wUpyIKxt2RGIy5geqQCjCYSSGgaNFafEV2pnOVSx+7N" + "9z/ICNQfDBD6b83MO7yPHC1cXcdREKHHeqaKyQLiVRk9+R/3D4vEZt682GRaUKOY" + "PQXK1Be2nyZoo4gZs62nZVAliJ+chFkEUog9k9OsIvZRG7X+VEjVYBqxlE1S3ikt" + "igFXiuLC/LDCi3IgVwQjfNx1/mhxsO7GSaCCAfswggH3MIIBYKADAgEDAiA4OEUy" + "REVFNDcwNjhCQjM3RjE5QkE2NDdCRjAyRkQwRjANBgkqhkiG9w0BAQQFADAyMQsw" + "CQYDVQQGEwJTZTERMA8GA1UEChMIUHJpbWVLZXkxEDAOBgNVBAMTB1RvbWFzIEcw" + "HhcNMDMwNjAxMDgzNDQyWhcNMDMwNzAxMDgzNDQyWjAyMQswCQYDVQQGEwJTZTER" + "MA8GA1UEChMIUHJpbWVLZXkxEDAOBgNVBAMTB1RvbWFzIEcwgZ8wDQYJKoZIhvcN" + "AQEBBQADgY0AMIGJAoGBAOu47fpIQfzfSnEBTG2WJpKZz1891YLNulc7XgMk8hl3" + "nVC4m34SaR7eXR3nCsorYEpPPmL3affaPFsBnNBQNoZLxKmQ1RKiDyu8dj90AKCP" + "CFlIM2aJbKMiQad+dt45qse6k0yTrY3Yx0hMH76tRkDif4DjM5JUvdf4d/zlYcCz" + "AgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAGNoWI02kXNEA5sPHb3KEY8QZoYM5Kha1" + "JA7HLmlXKy6geeJmk329CUnvF0Cr7zxbMkFRdUDUtR8omDDnGlBSOCkV6LLYH939" + "Z8iysfaxigZkxUqUYGLtYHhsEjVgcpfKZVxTz0E2ocR2P+IuU04Duel/gU4My6Qv" + "LDpwo1CQC10xggHDMIIBvwIBATBWMDIxCzAJBgNVBAYTAlNlMREwDwYDVQQKEwhQ" + "cmltZUtleTEQMA4GA1UEAxMHVG9tYXMgRwIgODhFMkRFRTQ3MDY4QkIzN0YxOUJB" + "NjQ3QkYwMkZEMEYwDAYIKoZIhvcNAgUFAKCBwTASBgpghkgBhvhFAQkCMQQTAjE5" + "MBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTAzMDYw" + "MTA4MzQ0MlowHwYJKoZIhvcNAQkEMRIEEBqGJFo7n4B8sFBCi54PckIwIAYKYIZI" + "AYb4RQEJBTESBBA77Owxh2rbflhXsDYw3xsLMDAGCmCGSAGG+EUBCQcxIhMgODhF" + "MkRFRTQ3MDY4QkIzN0YxOUJBNjQ3QkYwMkZEMEYwDQYJKoZIhvcNAQEBBQAEgYB4" + "BPcw4NPIt4nMOFKSGg5oM1nGDPGFN7eorZV+/2uWiQfdtK4B4lzCTuNxWRT853dW" + "dRDzXBCGEArlG8ef+vDD/HP9SX3MQ0NJWym48VI9bTpP/mJlUKSsfgDYHohvUlVI" + "E5QFC6ILVLUmuWPGchUEAb8t30DDnmeXs8QxdqHfbQ==").getBytes()); static byte[] unknowncacertBytes = Base64.decode(("MIICLDCCAZWgAwIBAgIIbzEhUVZYO3gwDQYJKoZIhvcNAQEFBQAwLzEPMA0GA1UE" + "AxMGVGVzdENBMQ8wDQYDVQQKEwZBbmFUb20xCzAJBgNVBAYTAlNFMB4XDTAyMDcw" + "OTEyNDc1OFoXDTA0MDgxNTEyNTc1OFowLzEPMA0GA1UEAxMGVGVzdENBMQ8wDQYD" + "VQQKEwZBbmFUb20xCzAJBgNVBAYTAlNFMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCB" + "hwKBgQDZlACHRwJnQKlgpMqlZQmxvCrJPpPFyhxvjDHlryhp/AQ6GCm+IkGUVlwL" + "sCnjgZH5BXDNaVXpkmME8334HFsxVlXqmZ2GqyP6kptMjbWZ2SRLBRKjAcI7EJIN" + "FPDIep9ZHXw1JDjFGoJ4TLFd99w9rQ3cB6zixORoyCZMw+iebwIBEaNTMFEwDwYD" + "VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUY3v0dqhUJI6ldKV3RKb0Xg9XklEwHwYD" + "VR0jBBgwFoAUY3v0dqhUJI6ldKV3RKb0Xg9XklEwDQYJKoZIhvcNAQEFBQADgYEA" + "i1P53jnSPLkyqm7i3nLNi+hG7rMgF+kRi6ZLKhzIPyKcAWV8iZCI8xl/GurbZ8zd" + "nTiIOfQIP9eD/nhIIo7n4JOaTUeqgyafPsEgKdTiZfSdXjvy6rj5GiZ3DaGZ9SNK" + "FgrCpX5kBKVbbQLO6TjJKCjX29CfoJ2TbP1QQ6UbBAY=").getBytes()); private static Context ctx; private static ISignSessionHome home; private static ISignSessionRemote remote; private static UserDataHome userhome; private static CertificateDataHome certhome; private static int caid=0; private static Admin admin; private static X509Certificate cacert = null; private static X509Certificate ocspTestCert = null; private static X509Certificate unknowncacert = null; public static void main( String args[] ) { junit.textui.TestRunner.run( suite() ); } public static TestSuite suite() { return new TestSuite( ProtocolHttpTest.class ); } public ProtocolHttpTest( String name ) { super( name ); } protected void setUp() throws Exception { log.debug(">setUp()"); // Install BouncyCastle provider CertTools.installBCProvider(); // We want to get error responses without exceptions HttpUnitOptions.setExceptionsThrownOnErrorStatus(false); admin = new Admin(Admin.TYPE_BATCHCOMMANDLINE_USER); ctx = getInitialContext(); Object obj = ctx.lookup("CAAdminSession"); ICAAdminSessionHome cahome = (ICAAdminSessionHome) javax.rmi.PortableRemoteObject.narrow(obj, ICAAdminSessionHome.class); ICAAdminSessionRemote casession = cahome.create(); Collection caids = casession.getAvailableCAs(admin); Iterator iter = caids.iterator(); if (iter.hasNext()) { caid = ((Integer)iter.next()).intValue(); } else { assertTrue("No active CA! Must have at least one active CA to run tests!", false); } CAInfo cainfo = casession.getCAInfo(admin,caid); Collection certs = cainfo.getCertificateChain(); if (certs.size() > 0) { Iterator certiter = certs.iterator(); cacert = (X509Certificate)certiter.next(); } else { log.error("NO CACERT for caid "+caid); } obj = ctx.lookup("RSASignSession"); home = (ISignSessionHome) javax.rmi.PortableRemoteObject.narrow(obj, ISignSessionHome.class); remote = home.create(); obj = ctx.lookup("UserData"); userhome = (UserDataHome) javax.rmi.PortableRemoteObject.narrow(obj, UserDataHome.class); obj = ctx.lookup("CertificateData"); certhome = (CertificateDataHome) javax.rmi.PortableRemoteObject.narrow(obj, CertificateDataHome.class); unknowncacert = CertTools.getCertfromByteArray(unknowncacertBytes); log.debug("<setUp()"); } protected void tearDown() throws Exception { } private Context getInitialContext() throws NamingException { log.debug(">getInitialContext"); Context ctx = new javax.naming.InitialContext(); log.debug("<getInitialContext"); return ctx; } /** * Generates a RSA key pair. * * @return KeyPair the generated key pair * * @throws Exception if en error occurs... */ private static KeyPair genKeys() throws Exception { KeyPairGenerator keygen = KeyPairGenerator.getInstance("RSA", "BC"); keygen.initialize(512); log.debug("Generating keys, please wait..."); KeyPair rsaKeys = keygen.generateKeyPair(); log.debug("Generated " + rsaKeys.getPrivate().getAlgorithm() + " keys with length" + ((RSAPrivateKey) rsaKeys.getPrivate()).getModulus().bitLength()); return rsaKeys; } // genKeys public void test01Access() throws Exception { WebConversation wc = new WebConversation(); // Hit with GET gives a 405 with OCSP: BAD_METHOD WebRequest request = new GetMethodWebRequest( httpReqPath + '/' + resourceOcsp ); WebResponse response = wc.getResponse( request ); assertEquals( "Response code", 405, response.getResponseCode() ); // Hit scep, gives a 400: Bad Request request = new GetMethodWebRequest( httpReqPath + '/' + resourceScep ); response = wc.getResponse( request ); assertEquals( "Response code", 400, response.getResponseCode() ); } /** Tests scep message from OpenScep * Prerequisites for running the tests is to have a CA setup with * issuerDN: CN=TestCA,O=AnaTom,C=SE. * @throws Exception error */ public void test02OpenScep() throws Exception { log.debug(">test02OpenScep()"); ScepRequestMessage msg = new ScepRequestMessage(openscep); // send message to server and see what happens WebConversation wc = new WebConversation(); WebRequest request = new GetMethodWebRequest( httpReqPath + '/' + resourceScep ); request.setParameter("operation", "PKIOperation");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -