Author: mturk
Date: Sat Oct 22 09:33:21 2011
New Revision: 1187679
URL: http://svn.apache.org/viewvc?rev=1187679&view=rev
Log:
Add useCertificate method
Added:
commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestSSLCtx.java
(with props)
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/LocalStrings.properties
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java
commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c
commons/sandbox/runtime/trunk/src/main/native/modules/openssl/ctx.c
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/LocalStrings.properties?rev=1187679&r1=1187678&r2=1187679&view=diff
==============================================================================
---
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/LocalStrings.properties
(original)
+++
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/LocalStrings.properties
Sat Oct 22 09:33:21 2011
@@ -20,5 +20,6 @@ password.PROMPT=Some of your private key
\nIn order to read them you have to provide the pass phrases.\
\nEnter password :
sslctx.ENOCRLLOC=At least one of CARevocationFile or CARevocationPath must be
configured
+sslctx.EMISSMATCH=Private key does not match the certificate public key
store.ENOTREG=File '{0}' does not exist or is empty
store.ENOTDIR=Path '{0}' is not directory
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java?rev=1187679&r1=1187678&r2=1187679&view=diff
==============================================================================
---
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java
(original)
+++
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ssl/SSLContext.java
Sat Oct 22 09:33:21 2011
@@ -54,6 +54,8 @@ public final class SSLContext extends SS
throws SSLException;
private static native void addcrlstore0(long ctx, String file, String
path)
throws SSLException;
+ private static native boolean usecert0(long ctx, long crt, long key)
+ throws SSLException;
private SSLContext()
{
@@ -239,6 +241,8 @@ public final class SSLContext extends SS
public synchronized void dispose()
throws IllegalStateException
{
+ if (super.pointer == 0L)
+ throw new ObjectNotInitializedException();
for (int i = 0; i < keys.length; i++) {
if (keys[i] != null) {
keys[i].dispose();
@@ -255,5 +259,24 @@ public final class SSLContext extends SS
}
}
+ public synchronized void useCertificate(SSLCertificate crt, SSLKey key)
+ throws IllegalStateException,
+ ObjectNotInitializedException,
+ SSLException
+ {
+ if (super.pointer == 0L)
+ throw new ObjectNotInitializedException();
+ for (int i = 0; i < cert.length; i++) {
+ if (cert[i] == null) {
+ if (!usecert0(super.pointer, ((SSLObject)crt).pointer,
((SSLObject)key).pointer))
+ throw new SSLException(Local.sm.get("sslctx.EMISSMATCH"));
+ cert[i] = crt;
+ keys[i] = key;
+ return;
+ }
+ }
+ throw new IllegalStateException();
+ }
+
}
Modified: commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c?rev=1187679&r1=1187678&r2=1187679&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/modules/openssl/api.c Sat Oct
22 09:33:21 2011
@@ -183,7 +183,10 @@ struct SSLAPIst {
void (*fpSSL_CTX_set_verify)(SSL_CTX *, int, int (*)(int,
X509_STORE_CTX *));
int (*fpSSL_CTX_set_generate_session_id)(SSL_CTX *,
GEN_SESSION_CB);
void (*fpSSL_CTX_set_quiet_shutdown)(SSL_CTX *, int);
-
+ int (*fpSSL_CTX_use_PrivateKey)(SSL_CTX *, EVP_PKEY *);
+ int (*fpSSL_CTX_use_certificate)(SSL_CTX *, X509 *);
+ int (*fpSSL_CTX_check_private_key)(const SSL_CTX *);
+
/*** SSL ***/
void* (*fpSSL_get_ex_data)(const SSL *, int);
int (*fpSSL_get_ex_new_index)(long, void *, CRYPTO_EX_new
*, CRYPTO_EX_dup *, CRYPTO_EX_free *);
@@ -356,6 +359,9 @@ ACR_JNI_EXPORT(jboolean, Native, ldopens
LIBSSL_FPLOAD(SSL_CTX_set_verify);
LIBSSL_FPLOAD(SSL_CTX_set_generate_session_id);
LIBSSL_FPLOAD(SSL_CTX_set_quiet_shutdown);
+ LIBSSL_FPLOAD(SSL_CTX_use_PrivateKey);
+ LIBSSL_FPLOAD(SSL_CTX_use_certificate);
+ LIBSSL_FPLOAD(SSL_CTX_check_private_key);
/*** BIO ***/
CRYPTO_FPLOAD(BIO_ctrl);
@@ -998,6 +1004,22 @@ void SSL_CTX_set_quiet_shutdown(SSL_CTX
SSLAPI_CALL(SSL_CTX_set_quiet_shutdown)(ctx, mode);
}
+int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey)
+{
+ return SSLAPI_CALL(SSL_CTX_use_PrivateKey)(ctx, pkey);
+}
+
+int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x)
+{
+ return SSLAPI_CALL(SSL_CTX_use_certificate)(ctx, x);
+}
+
+int SSL_CTX_check_private_key(const SSL_CTX *ctx)
+{
+ return SSLAPI_CALL(SSL_CTX_check_private_key)(ctx);
+}
+
+
void *SSL_get_ex_data(const SSL *ssl, int idx)
{
return SSLAPI_CALL(SSL_get_ex_data)(ssl, idx);
Modified: commons/sandbox/runtime/trunk/src/main/native/modules/openssl/ctx.c
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/modules/openssl/ctx.c?rev=1187679&r1=1187678&r2=1187679&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/modules/openssl/ctx.c
(original)
+++ commons/sandbox/runtime/trunk/src/main/native/modules/openssl/ctx.c Sat Oct
22 09:33:21 2011
@@ -195,7 +195,7 @@ ACR_SSL_EXPORT(jlong, SSLContext, new0)(
#endif
break;
case SSL_PROTOCOL_SSLV3:
- m = SSLv3_server_method();
+ m = SSLv3_server_method();
break;
case SSL_PROTOCOL_SSLV23:
m = SSLv23_server_method();
@@ -252,7 +252,7 @@ ACR_SSL_EXPORT(jlong, SSLContext, new0)(
default:
break;
}
- if (m == 0 || (c->ctx == SSL_CTX_new(m)) == 0) {
+ if (m == 0 || (c->ctx = SSL_CTX_new(m)) == 0) {
AcrFree(c);
ACR_THROW(ACR_EX_ENOTIMPL, 0);
return 0;
@@ -473,3 +473,23 @@ ACR_SSL_EXPORT(void, SSLContext, setscac
SSL_CTX_sess_set_cache_size(c->ctx, size);
}
+ACR_SSL_EXPORT(jboolean, SSLContext, usecert0)(JNI_STDARGS, jlong ctx,
+ jlong crt, jlong key)
+{
+ acr_ssl_ctx_t *c = J2P(ctx, acr_ssl_ctx_t *);
+ ssl_obj_t *cert = J2P(crt, ssl_obj_t *);
+ ssl_obj_t *pkey = J2P(key, ssl_obj_t *);
+
+ if (SSL_CTX_use_certificate(c->ctx, cert->u.x509) <= 0) {
+ ssl_throw_errno(env, ACR_EX_ESSL);
+ return JNI_FALSE;
+ }
+ if (SSL_CTX_use_PrivateKey(c->ctx, pkey->u.pkey) <= 0) {
+ ssl_throw_errno(env, ACR_EX_ESSL);
+ return JNI_FALSE;
+ }
+ if (SSL_CTX_check_private_key(c->ctx) == 0)
+ return JNI_FALSE;
+ else
+ return JNI_TRUE;
+}
Added:
commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestSSLCtx.java
URL:
http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestSSLCtx.java?rev=1187679&view=auto
==============================================================================
---
commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestSSLCtx.java
(added)
+++
commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestSSLCtx.java
Sat Oct 22 09:33:21 2011
@@ -0,0 +1,46 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime.ssl;
+
+import org.testng.annotations.*;
+import org.testng.Assert;
+import java.io.IOException;
+import java.io.File;
+import java.nio.ByteBuffer;
+import org.apache.commons.runtime.Native;
+
+public class TestSSLCtx extends Assert
+{
+
+ private static final String pkey = "certificates/localhost.key";
+ private static final String cert = "certificates/localhost.crt";
+
+ @Test(groups = { "openssl" })
+ public void simpleInit()
+ throws Exception
+ {
+ SSLKey key = new SSLKey("Demo key");
+ key.load(pkey, SSLKeyFormat.PEM, "secret");
+ SSLCertificate crt = new SSLCertificate("Demo certificate");
+ crt.load(cert);
+
+ SSLContext ctx = new SSLContext(SSLProtocolMethod.SSLv23,
SSLProtocolMode.SERVER);
+ ctx.useCertificate(crt, key);
+ }
+
+
+}
Propchange:
commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestSSLCtx.java
------------------------------------------------------------------------------
svn:eol-style = native