Java Examples for org.bouncycastle.util.io.pem.PemReader
The following java examples will help you to understand the usage of org.bouncycastle.util.io.pem.PemReader. These source code samples are taken from different open source projects.
Example 1
Project: crash-master File: KeyPairUtils.java View source code |
public static Object readKey(Reader reader) throws Exception { try { PEMParser pemParser = new PEMParser(reader); try { return pemParser.readObject(); } finally { pemParser.close(); } } catch (NoClassDefFoundError e) { Class<?> pemReaderClass = Class.forName("org.bouncycastle.openssl.PEMReader"); PemReader r = (PemReader) pemReaderClass.getConstructor(Reader.class).newInstance(reader); try { return pemReaderClass.getMethod("readObject").invoke(r); } finally { r.close(); } } }
Example 2
Project: ilves-master File: CertificateConverter.java View source code |
@Override public String convertToModel(String value, Class<? extends String> targetType, Locale locale) throws ConversionException { if (value == null || value.length() == 0) { return null; } else { try { final StringReader stringReader = new StringReader(value); final PemReader pemReader = new PemReader(stringReader); final byte[] x509Data = pemReader.readPemObject().getContent(); final CertificateFactory certificateFactory = CertificateFactory.getInstance("X509"); final Certificate certificate = certificateFactory.generateCertificate(new ByteArrayInputStream(x509Data)); return Base64.encodeBase64String(certificate.getEncoded()); } catch (final Exception e) { throw new ConversionException("Error parsing ASCII X509 certificate.", e); } } }
Example 3
Project: java-jwt-master File: PemUtils.java View source code |
private static byte[] parsePEMFile(File pemFile) throws IOException { if (!pemFile.isFile() || !pemFile.exists()) { throw new FileNotFoundException(String.format("The file '%s' doesn't exist.", pemFile.getAbsolutePath())); } PemReader reader = new PemReader(new FileReader(pemFile)); PemObject pemObject = reader.readPemObject(); return pemObject.getContent(); }
Example 4
Project: gocd-master File: RegistrationJSONizer.java View source code |
public static Registration fromJson(String json) { Map map = GSON.fromJson(json, Map.class); if (map.isEmpty()) { return Registration.createNullPrivateKeyEntry(); } List<Certificate> chain = new ArrayList<>(); try { PemReader reader = new PemReader(new StringReader((String) map.get("agentPrivateKey"))); KeyFactory kf = KeyFactory.getInstance("RSA"); PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(reader.readPemObject().getContent()); PrivateKey privateKey = kf.generatePrivate(spec); String agentCertificate = (String) map.get("agentCertificate"); PemReader certReader = new PemReader(new StringReader(agentCertificate)); while (true) { PemObject obj = certReader.readPemObject(); if (obj == null) { break; } chain.add(CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(obj.getContent()))); } return new Registration(privateKey, chain.toArray(new Certificate[chain.size()])); } catch (IOExceptionNoSuchAlgorithmException | CertificateException | InvalidKeySpecException | e) { throw bomb(e); } }
Example 5
Project: ivotingverification-master File: Crypto.java View source code |
private static RSAKeyParameters readKey(String pemstr) throws IOException { PemReader reader = null; PemObject pem; try { StringReader rr = new StringReader(pemstr); reader = new PemReader(rr); pem = reader.readPemObject(); } finally { if (reader != null) { reader.close(); } } ASN1InputStream stream = null; ASN1Sequence seq; try { stream = new ASN1InputStream(pem.getContent()); seq = (ASN1Sequence) stream.readObject(); Enumeration enm = seq.getObjects(); enm.nextElement(); stream = new ASN1InputStream(((DERBitString) enm.nextElement()).getBytes()); seq = (ASN1Sequence) stream.readObject(); } finally { if (stream != null) { stream.close(); } } RSAPublicKeyStructure pks = new RSAPublicKeyStructure(seq); return new RSAKeyParameters(false, pks.getModulus(), pks.getPublicExponent()); }
Example 6
Project: jqm-master File: JdbcCa.java View source code |
public static CertificateRequest initCa(DbConn cnx) { // result field CertificateRequest cr = new CertificateRequest(); // Get the alias of the private key to use String caAlias = null; caAlias = GlobalParameter.getParameter(cnx, "keyAlias", Constants.CA_DEFAULT_PRETTY_NAME); // Create the CA if it does not already exist PKI pki = null; try { pki = PKI.select_key(cnx, caAlias); } catch (NoResultException e) { cr = new CertificateRequest(); cr.generateCA(caAlias); PKI.create(cnx, caAlias, cr.writePemPrivateToString(), cr.writePemPublicToString()); cnx.commit(); pki = PKI.select_key(cnx, caAlias); } try { // Public (X509 certificate) String pemCert = pki.getPemCert(); StringReader sr = new StringReader(pemCert); PemReader pr = new PemReader(sr); cr.holder = new X509CertificateHolder(pr.readPemObject().getContent()); pr.close(); // Private key String pemPrivate = pki.getPemPK(); sr = new StringReader(pemPrivate); PEMParser pp = new PEMParser(sr); PEMKeyPair caKeyPair = (PEMKeyPair) pp.readObject(); pp.close(); byte[] encodedPrivateKey = caKeyPair.getPrivateKeyInfo().getEncoded(); KeyFactory keyFactory = KeyFactory.getInstance(Constants.KEY_ALGORITHM); PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedPrivateKey); cr.privateKey = keyFactory.generatePrivate(privateKeySpec); } catch (Exception e) { throw new PkiException(e); } // Done return cr; }
Example 7
Project: keywhiz-master File: ExpirationExtractor.java View source code |
@Nullable public static Instant expirationFromEncodedCertificateChain(byte[] content) { PemReader reader = new PemReader(new InputStreamReader(new ByteArrayInputStream(content), UTF_8)); PemObject object; try { object = reader.readPemObject(); } catch (IOException e) { throw Throwables.propagate(e); } Instant earliest = null; while (object != null) { if (object.getType().equals("CERTIFICATE")) { Instant expiry = expirationFromRawCertificate(object.getContent()); if (earliest == null || expiry.isBefore(earliest)) { earliest = expiry; } } try { object = reader.readPemObject(); } catch (IOException e) { throw Throwables.propagate(e); } } return earliest; }
Example 8
Project: tor-research-framework-master File: TorServerSocket.java View source code |
public void loadKeys() {
try {
FileInputStream idCertIS = new FileInputStream(new File("keys/identity.crt"));
FileInputStream linkCertIS = new FileInputStream(new File("keys/link.crt"));
FileInputStream authCertIS = new FileInputStream(new File("keys/auth.crt"));
CertificateFactory cf = null;
cf = CertificateFactory.getInstance("X.509");
identityCert = (X509Certificate) cf.generateCertificate(idCertIS);
log.info("Our Identity Cert Digest: " + Hex.toHexString(TorCrypto.getSHA1().digest(TorCrypto.publicKeyToASN1((RSAPublicKey) identityCert.getPublicKey()))));
linkCert = (X509Certificate) cf.generateCertificate(linkCertIS);
log.info("Our Link Cert Digest: " + Hex.toHexString(TorCrypto.getSHA1().digest(TorCrypto.publicKeyToASN1((RSAPublicKey) linkCert.getPublicKey()))));
authCert = (X509Certificate) cf.generateCertificate(authCertIS);
log.info("Our Auth Cert Digest: " + Hex.toHexString(TorCrypto.getSHA1().digest(TorCrypto.publicKeyToASN1((RSAPublicKey) authCert.getPublicKey()))));
identityPubKey = (RSAPublicKey) identityCert.getPublicKey();
FileReader in = new FileReader("keys/identity.key");
identityPrivKey = RSAPrivateKey.getInstance(new PemReader(in).readPemObject().getContent());
} catch (CertificateExceptionIOException | e) {
log.error("Unable to load server public key");
System.exit(1);
}
}
Example 9
Project: VanillaVotifier-master File: AbstractConfig.java View source code |
protected void loadKeyPair() throws IOException, InvalidKeySpecException { if (!publicKeyFile.exists() && !privateKeyFile.exists()) { generateKeyPair(); saveKeyPair(); } if (!publicKeyFile.exists()) { throw new PublicKeyFileNotFoundException(); } if (!privateKeyFile.exists()) { throw new PrivateKeyFileNotFoundException(); } PemReader publicKeyPemReader = new PemReader(new BufferedReader(new FileReader(publicKeyFile))); PemReader privateKeyPemReader = new PemReader(new BufferedReader(new FileReader(privateKeyFile))); PemObject publicPemObject = publicKeyPemReader.readPemObject(); if (publicPemObject == null) { throw new InvalidPublicKeyFileException(); } PemObject privatePemObject = privateKeyPemReader.readPemObject(); if (privatePemObject == null) { throw new InvalidPrivateKeyFileException(); } keyPair = new KeyPair(RsaUtils.bytesToPublicKey(publicPemObject.getContent()), RsaUtils.bytesToPrivateKey(privatePemObject.getContent())); publicKeyPemReader.close(); privateKeyPemReader.close(); }
Example 10
Project: axelor-business-suite-master File: PayboxService.java View source code |
/** Chargement de la cle AU FORMAT pem * Alors ajouter la dépendance dans le fichier pom.xml : * <dependency> * <groupId>org.bouncycastle</groupId> * <artifactId>bcprov-jdk15on</artifactId> * <version>1.47</version> * </dependency> * * Ainsi que l'import : import org.bouncycastle.util.io.pem.PemReader; * * @param pubKeyFile * @return * @throws Exception */ private PublicKey getPubKey(String pubKeyPath) throws Exception { PemReader reader = new PemReader(new FileReader(pubKeyPath)); byte[] pubKey = reader.readPemObject().getContent(); reader.close(); KeyFactory keyFactory = KeyFactory.getInstance(this.ENCRYPTION_ALGORITHM); X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pubKey); return keyFactory.generatePublic(pubKeySpec); }
Example 11
Project: bc-java-master File: TestCACertsFetch.java View source code |
/** * Test Fetch CA certs without doing any SSL TLS verification. * This is just a catch all to prove we can get some certificates back. * Do not use this as an example of how to do it in the world, you need * to make a conscious decision about accepting the certificates tended * as part of the TLS handshake. See testFetchCaCertsWithBogusTrustAnchor() * * @throws Exception */ @Test public void testFetchCaCerts() throws Exception { ESTTestUtils.ensureProvider(); X509CertificateHolder[] theirCAs = null; ESTServerUtils.ServerInstance serverInstance = null; try { serverInstance = startDefaultServer(); System.setProperty("org.bouncycastle.debug.est", "all"); // SSLSocketFactoryCreatorBuilder sfcb = new SSLSockuetFactoryCreatorBuilder(); ESTService est = new JsseESTServiceBuilder("localhost:8443/", JcaJceUtils.getTrustAllTrustManager()).build(); CACertsResponse caCertsResponse = est.getCACerts(); X509CertificateHolder[] caCerts = ESTService.storeToArray(caCertsResponse.getCertificateStore()); FileReader fr = new FileReader(ESTServerUtils.makeRelativeToServerHome("/estCA/cacert.crt")); PemReader reader = new PemReader(fr); X509CertificateHolder fromFile = new X509CertificateHolder(reader.readPemObject().getContent()); reader.close(); fr.close(); Assert.assertFalse("Must not be trusted.", caCertsResponse.isTrusted()); Assert.assertEquals("Returned ca certs should be 1", caCerts.length, 1); Assert.assertEquals("CA cert did match expected.", fromFile, caCerts[0]); } finally { if (serverInstance != null) { serverInstance.getServer().stop_server(); } } }
Example 12
Project: bergamot-master File: PEMUtil.java View source code |
public static PrivateKey loadKey(File file) throws IOException { try { // fecking Java, POS at times try (PemReader pr = new PemReader(new FileReader(file))) { PemObject obj = pr.readPemObject(); KeyFactory kf = KeyFactory.getInstance("RSA"); PrivateKey key = kf.generatePrivate(new PKCS8EncodedKeySpec(obj.getContent())); return key; } } catch (Exception e) { throw new IOException("Error loading key", e); } }
Example 13
Project: cloudstack-master File: CertServiceImpl.java View source code |
public PrivateKey parsePrivateKey(final String key) throws IOException { Preconditions.checkArgument(!Strings.isNullOrEmpty(key)); try (final PemReader pemReader = new PemReader(new StringReader(key))) { final PemObject pemObject = pemReader.readPemObject(); final byte[] content = pemObject.getContent(); final PKCS8EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(content); final KeyFactory factory = KeyFactory.getInstance("RSA", "BC"); return factory.generatePrivate(privKeySpec); } catch (NoSuchAlgorithmExceptionNoSuchProviderException | e) { throw new IOException("No encryption provider available.", e); } catch (final InvalidKeySpecException e) { throw new IOException("Invalid Key format.", e); } }
Example 14
Project: cnAndroidDocs-master File: Credentials.java View source code |
/** * Convert objects from PEM format, which is used for * CA_CERTIFICATE and USER_CERTIFICATE entries. */ public static List<X509Certificate> convertFromPem(byte[] bytes) throws IOException, CertificateException { ByteArrayInputStream bai = new ByteArrayInputStream(bytes); Reader reader = new InputStreamReader(bai, Charsets.US_ASCII); PemReader pr = new PemReader(reader); CertificateFactory cf = CertificateFactory.getInstance("X509"); List<X509Certificate> result = new ArrayList<X509Certificate>(); PemObject o; while ((o = pr.readPemObject()) != null) { if (o.getType().equals("CERTIFICATE")) { Certificate c = cf.generateCertificate(new ByteArrayInputStream(o.getContent())); result.add((X509Certificate) c); } else { throw new IllegalArgumentException("Unknown type " + o.getType()); } } pr.close(); return result; }
Example 15
Project: irma_future_id-master File: WriterTest.java View source code |
private void doWriteReadTest(PrivateKey akp, String provider, String algorithm) throws IOException { StringWriter sw = new StringWriter(); PEMWriter pw = new PEMWriter(sw, provider); pw.writeObject(akp, algorithm, testPassword, random); pw.close(); String data = sw.toString(); PemReader pRaw = new PemReader(new StringReader(data)); PemObject pemObject = pRaw.readPemObject(); List headers = pemObject.getHeaders(); for (int i = 0; i != headers.size(); i++) { PemHeader pemH = (PemHeader) headers.get(i); if (pemH.getName().equals("DEK-Info")) { String v = pemH.getValue(); for (int j = 0; j != v.length(); j++) { if (v.charAt(j) >= 'a' && v.charAt(j) <= 'f') { fail("lower case detected in DEK-Info: " + v); } } } } PEMReader pr = new PEMReader(new StringReader(data), new Password(testPassword), provider); Object o = pr.readObject(); if (o == null || !(o instanceof KeyPair)) { fail("Didn't find OpenSSL key"); } KeyPair kp = (KeyPair) o; PrivateKey privKey = kp.getPrivate(); if (!akp.equals(privKey)) { fail("Failed to read back test key encoded with: " + algorithm); } }
Example 16
Project: launchkey-java-master File: JCECryptoTest.java View source code |
@Before public void setUp() throws Exception { base64 = new Base64(0); provider = new BouncyCastleProvider(); KeyFactory keyFactory = KeyFactory.getInstance("RSA", provider); PemObject pem = new PemReader(new StringReader(PRIVATE_KEY)).readPemObject(); rsaPrivateKey = (RSAPrivateKey) keyFactory.generatePrivate(new PKCS8EncodedKeySpec(pem.getContent())); pem = new PemReader(new StringReader(PUBLIC_KEY)).readPemObject(); rsaPublicKey = (RSAPublicKey) keyFactory.generatePublic(new X509EncodedKeySpec(pem.getContent())); crypto = new JCECrypto(provider); }
Example 17
Project: property-db-master File: Credentials.java View source code |
/** * Convert objects from PEM format, which is used for * CA_CERTIFICATE and USER_CERTIFICATE entries. */ public static List<X509Certificate> convertFromPem(byte[] bytes) throws IOException, CertificateException { ByteArrayInputStream bai = new ByteArrayInputStream(bytes); Reader reader = new InputStreamReader(bai, Charsets.US_ASCII); PemReader pr = new PemReader(reader); CertificateFactory cf = CertificateFactory.getInstance("X509"); List<X509Certificate> result = new ArrayList<X509Certificate>(); PemObject o; while ((o = pr.readPemObject()) != null) { if (o.getType().equals("CERTIFICATE")) { Certificate c = cf.generateCertificate(new ByteArrayInputStream(o.getContent())); result.add((X509Certificate) c); } else { throw new IllegalArgumentException("Unknown type " + o.getType()); } } pr.close(); return result; }
Example 18
Project: android-sdk-sources-for-api-level-23-master File: Credentials.java View source code |
/** * Convert objects from PEM format, which is used for * CA_CERTIFICATE and USER_CERTIFICATE entries. */ public static List<X509Certificate> convertFromPem(byte[] bytes) throws IOException, CertificateException { ByteArrayInputStream bai = new ByteArrayInputStream(bytes); Reader reader = new InputStreamReader(bai, StandardCharsets.US_ASCII); PemReader pr = new PemReader(reader); CertificateFactory cf = CertificateFactory.getInstance("X509"); List<X509Certificate> result = new ArrayList<X509Certificate>(); PemObject o; while ((o = pr.readPemObject()) != null) { if (o.getType().equals("CERTIFICATE")) { Certificate c = cf.generateCertificate(new ByteArrayInputStream(o.getContent())); result.add((X509Certificate) c); } else { throw new IllegalArgumentException("Unknown type " + o.getType()); } } pr.close(); return result; }
Example 19
Project: android_frameworks_base-master File: Credentials.java View source code |
/** * Convert objects from PEM format, which is used for * CA_CERTIFICATE and USER_CERTIFICATE entries. */ public static List<X509Certificate> convertFromPem(byte[] bytes) throws IOException, CertificateException { ByteArrayInputStream bai = new ByteArrayInputStream(bytes); Reader reader = new InputStreamReader(bai, StandardCharsets.US_ASCII); PemReader pr = new PemReader(reader); try { CertificateFactory cf = CertificateFactory.getInstance("X509"); List<X509Certificate> result = new ArrayList<X509Certificate>(); PemObject o; while ((o = pr.readPemObject()) != null) { if (o.getType().equals("CERTIFICATE")) { Certificate c = cf.generateCertificate(new ByteArrayInputStream(o.getContent())); result.add((X509Certificate) c); } else { throw new IllegalArgumentException("Unknown type " + o.getType()); } } return result; } finally { pr.close(); } }
Example 20
Project: platform_frameworks_base-master File: Credentials.java View source code |
/** * Convert objects from PEM format, which is used for * CA_CERTIFICATE and USER_CERTIFICATE entries. */ public static List<X509Certificate> convertFromPem(byte[] bytes) throws IOException, CertificateException { ByteArrayInputStream bai = new ByteArrayInputStream(bytes); Reader reader = new InputStreamReader(bai, StandardCharsets.US_ASCII); PemReader pr = new PemReader(reader); try { CertificateFactory cf = CertificateFactory.getInstance("X509"); List<X509Certificate> result = new ArrayList<X509Certificate>(); PemObject o; while ((o = pr.readPemObject()) != null) { if (o.getType().equals("CERTIFICATE")) { Certificate c = cf.generateCertificate(new ByteArrayInputStream(o.getContent())); result.add((X509Certificate) c); } else { throw new IllegalArgumentException("Unknown type " + o.getType()); } } return result; } finally { pr.close(); } }
Example 21
Project: solarnetwork-node-master File: DefaultSetupServiceTest.java View source code |
@Test public void handleRenewCertificateInstruction() throws Exception { expect(settingDao.getSetting(KEY_PASSWORD, SetupSettings.SETUP_TYPE_KEY)).andReturn(TEST_CONF_VALUE).atLeastOnce(); replay(settingDao); keystoreService.saveCACertificate(CA_CERT); keystoreService.generateNodeSelfSignedCertificate(TEST_DN); String csr = keystoreService.generateNodePKCS10CertificateRequestString(); X509Certificate originalCert; PemReader pemReader = new PemReader(new StringReader(csr)); try { PemObject pem = pemReader.readPemObject(); PKCS10CertificationRequest req = new PKCS10CertificationRequest(pem.getContent()); originalCert = PKITestUtils.sign(req, CA_CERT, CA_KEY_PAIR.getPrivate()); String signedPem = PKITestUtils.getPKCS7Encoding(new X509Certificate[] { originalCert }); keystoreService.saveNodeSignedCertificate(signedPem); log.debug("Saved signed node certificate {}:\n{}", originalCert.getSerialNumber(), signedPem); verify(settingDao); assertNotNull(csr); } finally { pemReader.close(); } // now let's renew! EasyMock.reset(settingDao); expect(settingDao.getSetting(KEY_PASSWORD, SetupSettings.SETUP_TYPE_KEY)).andReturn(TEST_CONF_VALUE).atLeastOnce(); replay(settingDao); KeyStore keyStore = loadKeyStore(); PrivateKey nodeKey = (PrivateKey) keyStore.getKey("node", TEST_CONF_VALUE.toCharArray()); JcaContentSignerBuilder signerBuilder = new JcaContentSignerBuilder("SHA256WithRSA"); ContentSigner signer = signerBuilder.build(nodeKey); PKCS10CertificationRequestBuilder builder = new PKCS10CertificationRequestBuilder(JcaX500NameUtil.getSubject(originalCert), SubjectPublicKeyInfo.getInstance(originalCert.getPublicKey().getEncoded())); X509Certificate renewedCert = PKITestUtils.sign(builder.build(signer), CA_CERT, CA_KEY_PAIR.getPrivate()); String renewedSignedPem = PKITestUtils.getPKCS7Encoding(new X509Certificate[] { renewedCert }); BasicInstruction instr = new BasicInstruction(DefaultSetupService.INSTRUCTION_TOPIC_RENEW_CERTIFICATE, new Date(), "123", "456", new BasicInstructionStatus(456L, InstructionState.Received, new Date())); for (int i = 0; i < renewedSignedPem.length(); i += 256) { int end = i + (i + 256 < renewedSignedPem.length() ? 256 : renewedSignedPem.length() - i); instr.addParameter(DefaultSetupService.INSTRUCTION_PARAM_CERTIFICATE, renewedSignedPem.substring(i, end)); } InstructionState state = service.processInstruction(instr); Assert.assertEquals(InstructionState.Completed, state); X509Certificate nodeCert = keystoreService.getNodeCertificate(); Assert.assertEquals(renewedCert, nodeCert); verify(settingDao); }
Example 22
Project: loklak_server-master File: PublicKeyRegistrationService.java View source code |
@Override public JSONObject serviceImpl(Query post, HttpServletResponse response, Authorization authorization, final JSONObjectWithDefault permissions) throws APIException { if (post.get("register", null) == null && !post.get("create", false) && !post.get("getParameters", false)) { throw new APIException(400, "Accepted parameters: 'register', 'create' or 'getParameters'"); } JSONObject result = new JSONObject(); // return algorithm parameters and users for whom we are allowed to register a key if (post.get("getParameters", false)) { result.put("self", permissions.getBoolean("self", false)); result.put("users", permissions.getJSONObject("users")); result.put("userRoles", permissions.getJSONObject("userRoles")); JSONObject algorithms = new JSONObject(); JSONObject rsa = new JSONObject(); JSONArray keySizes = new JSONArray(); for (int i : allowedKeySizesRSA) { keySizes.put(i); } rsa.put("sizes", keySizes); rsa.put("defaultSize", defaultKeySizeRSA); algorithms.put("RSA", rsa); result.put("algorithms", algorithms); JSONArray formats = new JSONArray(); for (String format : allowedFormats) { formats.put(format); } result.put("formats", formats); return result; } // for which id? String id; if (post.get("id", null) != null) id = post.get("id", null); else id = authorization.getIdentity().getName(); // check if we are allowed register a key if (// if we don't want to register the key for the current user !id.equals(authorization.getIdentity().getName())) { // create Authentication to check if the user id is a registered user ClientCredential credential = new ClientCredential(ClientCredential.Type.passwd_login, id); Authentication authentication = new Authentication(credential, DAO.authentication); if (// check if identity is valid authentication.getIdentity() == null) { authentication.delete(); // do not leak if user exists or not throw new APIException(400, "Bad request"); } // check if the current user is allowed to create a key for the user in question boolean allowed = false; // check if the user in question is in 'users' if (permissions.getJSONObject("users", null).has(id) && permissions.getJSONObjectWithDefault("users", null).getBoolean(id, false)) { allowed = true; } else // check if the user role of the user in question is in 'userRoles' { Authorization auth = new Authorization(authentication.getIdentity(), DAO.authorization, DAO.userRoles); for (String key : permissions.getJSONObject("userRoles").keySet()) { if (key.equals(auth.getUserRole().getName()) && permissions.getJSONObject("userRoles").getBoolean(key)) { allowed = true; } } } // do not leak if user exists or not if (!allowed) throw new APIException(400, "Bad request"); } else // if we want to register a key for this user, bad are not allowed to (for example anonymous users) { if (!permissions.getBoolean("self", false)) throw new APIException(403, "You are not allowed to register a public key"); } // set algorithm. later, we maybe want to support other algorithms as well String algorithm = "RSA"; if (post.get("algorithm", null) != null) { algorithm = post.get("algorithm", null); } if (// create a new key pair on the server post.get("create", false)) { if (algorithm.equals("RSA")) { int keySize = 2048; if (post.get("key-size", null) != null) { int finalKeyLength = post.get("key-size", 0); if (!IntStream.of(allowedKeySizesRSA).anyMatch( x -> x == finalKeyLength)) { throw new APIException(400, "Invalid key size."); } keySize = finalKeyLength; } KeyPairGenerator keyGen; KeyPair keyPair; try { keyGen = KeyPairGenerator.getInstance(algorithm); keyGen.initialize(keySize); keyPair = keyGen.genKeyPair(); } catch (NoSuchAlgorithmException e) { throw new APIException(500, "Server error"); } registerKey(authorization.getIdentity(), keyPair.getPublic()); String pubkey_pem = null, privkey_pem = null; try { StringWriter writer = new StringWriter(); PemWriter pemWriter = new PemWriter(writer); pemWriter.writeObject(new PemObject("PUBLIC KEY", keyPair.getPublic().getEncoded())); pemWriter.flush(); pemWriter.close(); pubkey_pem = writer.toString(); } catch (IOException e) { } try { StringWriter writer = new StringWriter(); PemWriter pemWriter = new PemWriter(writer); pemWriter.writeObject(new PemObject("PRIVATE KEY", keyPair.getPrivate().getEncoded())); pemWriter.flush(); pemWriter.close(); privkey_pem = writer.toString(); } catch (IOException e) { } result.put("publickey_DER_BASE64", Base64.getEncoder().encodeToString(keyPair.getPublic().getEncoded())); result.put("privatekey_DER_BASE64", Base64.getEncoder().encodeToString(keyPair.getPrivate().getEncoded())); result.put("publickey_PEM", pubkey_pem); result.put("privatekey_PEM", privkey_pem); result.put("keyhash", IO.getKeyHash(keyPair.getPublic())); try { result.put("keyhash_urlsave", URLEncoder.encode(IO.getKeyHash(keyPair.getPublic()), "UTF-8")); } catch (UnsupportedEncodingException e) { } result.put("key-size", keySize); result.put("message", "Successfully created and registered key. Make sure to copy the private key, it won't be saved on the server"); return result; } throw new APIException(400, "Unsupported algorithm"); } else if (post.get("register", null) != null) { if (algorithm.equals("RSA")) { String type = post.get("type", null); if (type == null) type = "DER"; RSAPublicKey pub; String encodedKey; try { encodedKey = URLDecoder.decode(post.get("register", null), "UTF-8"); } catch (Throwable e) { throw new APIException(500, "Server error"); } Log.getLog().info("Key (" + type + "): " + encodedKey); if (type.equals("DER")) { try { X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(encodedKey)); pub = (RSAPublicKey) KeyFactory.getInstance(algorithm).generatePublic(keySpec); } catch (Throwable e) { throw new APIException(400, "Public key not readable (DER)"); } } else if (type.equals("PEM")) { try { PemReader pemReader = new PemReader(new StringReader(encodedKey)); PemObject pem = pemReader.readPemObject(); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(pem.getContent()); pub = (RSAPublicKey) KeyFactory.getInstance(algorithm).generatePublic(keySpec); } catch (Exception e) { throw new APIException(400, "Public key not readable (PEM)"); } } else { throw new APIException(400, "Invalid value for 'type'."); } // check key size (not really perfect yet) int keySize; int bitLength = pub.getModulus().bitLength(); if (bitLength <= 512) { keySize = 512; } else if (bitLength <= 1024) { keySize = 1024; } else if (bitLength <= 2048) { keySize = 2048; } else if (bitLength <= 4096) { keySize = 4096; } else { keySize = 8192; } if (!IntStream.of(allowedKeySizesRSA).anyMatch( x -> x == keySize)) { throw new APIException(400, "Invalid key length."); } registerKey(authorization.getIdentity(), pub); String pubkey_pem = null; try { StringWriter writer = new StringWriter(); PemWriter pemWriter = new PemWriter(writer); pemWriter.writeObject(new PemObject("PUBLIC KEY", pub.getEncoded())); pemWriter.flush(); pemWriter.close(); pubkey_pem = writer.toString(); } catch (IOException e) { } result.put("publickey_DER_BASE64", Base64.getEncoder().encodeToString(pub.getEncoded())); result.put("publickey_PEM", pubkey_pem); result.put("keyhash", IO.getKeyHash(pub)); try { result.put("keyhash_urlsave", URLEncoder.encode(IO.getKeyHash(pub), "UTF-8")); } catch (UnsupportedEncodingException e) { } result.put("message", "Successfully registered key."); return result; } throw new APIException(400, "Unsupported algorithm"); } throw new APIException(400, "Invalid parameter"); }
Example 23
Project: solarnetwork-common-master File: BCCertificateService.java View source code |
@Override public X509Certificate signCertificate(String csrPEM, X509Certificate caCert, PrivateKey privateKey) throws CertificateException { if (!csrPEM.matches("(?is)^\\s*-----BEGIN.*")) { // let's throw in the guards csrPEM = "-----BEGIN CERTIFICATE REQUEST-----\n" + csrPEM + "\n-----END CERTIFICATE REQUEST-----\n"; } PemReader reader = null; try { reader = new PemReader(new StringReader(csrPEM)); PemObject pemObj = reader.readPemObject(); log.debug("Parsed PEM type {}", pemObj.getType()); PKCS10CertificationRequest csr = new PKCS10CertificationRequest(pemObj.getContent()); Date now = new Date(); Date expire = new Date(now.getTime() + (1000L * 60L * 60L * 24L * certificateExpireDays)); X509v3CertificateBuilder builder = new X509v3CertificateBuilder(JcaX500NameUtil.getIssuer(caCert), new BigInteger(String.valueOf(counter.incrementAndGet())), now, expire, csr.getSubject(), csr.getSubjectPublicKeyInfo()); JcaContentSignerBuilder signerBuilder = new JcaContentSignerBuilder(signatureAlgorithm); ContentSigner signer; DefaultDigestAlgorithmIdentifierFinder digestAlgFinder = new DefaultDigestAlgorithmIdentifierFinder(); try { DigestCalculatorProvider digestCalcProvider = new JcaDigestCalculatorProviderBuilder().setProvider(new BouncyCastleProvider()).build(); JcaX509ExtensionUtils extUtils = new JcaX509ExtensionUtils(digestCalcProvider.get(digestAlgFinder.find("SHA-256"))); builder.addExtension(X509Extension.basicConstraints, false, new BasicConstraints(false)); builder.addExtension(X509Extension.subjectKeyIdentifier, false, extUtils.createSubjectKeyIdentifier(csr.getSubjectPublicKeyInfo())); builder.addExtension(X509Extension.authorityKeyIdentifier, false, extUtils.createAuthorityKeyIdentifier(caCert)); signer = signerBuilder.build(privateKey); } catch (OperatorException e) { log.error("Error signing CSR {}", csr.getSubject(), e); throw new CertificateException("Error signing CSR" + csr.getSubject() + ": " + e.getMessage()); } catch (CertificateEncodingException e) { log.error("Error signing CSR {}", csr.getSubject().toString(), e); throw new CertificateException("Error signing CSR" + csr.getSubject() + ": " + e.getMessage()); } X509CertificateHolder holder = builder.build(signer); JcaX509CertificateConverter converter = new JcaX509CertificateConverter(); try { return converter.getCertificate(holder); } catch (java.security.cert.CertificateException e) { throw new CertificateException("Error creating certificate", e); } } catch (IOException e) { throw new CertificateException("Error signing CSR", e); } finally { if (reader != null) { try { reader.close(); } catch (IOException e2) { log.warn("IOException closing PemReader", e2); } } } }
Example 24
Project: cloud-master File: CsrParser.java View source code |
private PKCS10CertificationRequest parsePemFormat(String data) throws IOException { PemReader reader = new PemReader(new StringReader(data)); PemObject pemObject = reader.readPemObject(); reader.close(); PKCS10CertificationRequest csr = new PKCS10CertificationRequest(pemObject.getContent()); return csr; }
Example 25
Project: dasein-cloud-core-master File: X509Store.java View source code |
private Object readPemObject(String pemString) throws IOException { StringReader strReader = new StringReader(pemString); PemReader pemReader = new PemReader(strReader); try { return pemReader.readPemObject(); } finally { strReader.close(); pemReader.close(); } }
Example 26
Project: usc-master File: DtlsUtils.java View source code |
static PemObject loadPemResource(String resource) throws IOException { // InputStream s = TlsTestUtils.class.getResourceAsStream(resource); InputStream s = new FileInputStream(resource); PemReader p = new PemReader(new InputStreamReader(s)); PemObject o = p.readPemObject(); p.close(); return o; }
Example 27
Project: mediaserver-master File: TlsUtils.java View source code |
static PemObject loadPemResource(String resource) throws IOException { InputStream s = new FileInputStream(resource); try (PemReader p = new PemReader(new InputStreamReader(s))) { PemObject o = p.readPemObject(); return o; } }
Example 28
Project: mqtt-spy-master File: SecureSocketUtils.java View source code |
/** * Loads a PEM file from the specified location. * * @param file Location of the file to load * * @return Content of the PEM file * * @throws IOException Thrown when cannot read the file */ public static byte[] loadPemFile(final String file) throws IOException { final PemReader pemReader = new PemReader(new FileReader(file)); final byte[] content = pemReader.readPemObject().getContent(); pemReader.close(); return content; }
Example 29
Project: occupy-pub-master File: CertificationAuthority.java View source code |
protected X509CertificateHolder readCertificate() throws IOException, CertificateException { try (PemReader reader = new PemReader(Files.newBufferedReader(pemPath))) { PemObject pem = reader.readPemObject(); return new X509CertificateHolder(pem.getContent()); } }