diff --git a/lib/private/certificate.php b/lib/private/certificate.php
new file mode 100644
index 0000000000000000000000000000000000000000..294722bc66094d8ff6fe3e44a195c1154ad36302
--- /dev/null
+++ b/lib/private/certificate.php
@@ -0,0 +1,116 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC;
+
+use OCP\ICertificate;
+
+class Certificate implements ICertificate {
+	protected $name;
+
+	protected $commonName;
+
+	protected $organization;
+
+	protected $serial;
+
+	protected $issueDate;
+
+	protected $expireDate;
+
+	protected $issuerName;
+
+	protected $issuerOrganization;
+
+	public function __construct($data, $name) {
+		$this->name = $name;
+		$info = openssl_x509_parse($data);
+		$this->commonName = $info['subject']['CN'];
+		$this->organization = isset($info['subject']['O']) ? $info['subject']['O'] : null;
+		$this->serial = $this->formatSerial($info['serialNumber']);
+		$this->issueDate = new \DateTime('@' . $info['validFrom_time_t']);
+		$this->expireDate = new \DateTime('@' . $info['validTo_time_t']);
+		$this->issuerName = $info['issuer']['CN'];
+		$this->issuerOrganization = isset($info['issuer']['O']) ? $info['issuer']['O'] : null;
+	}
+
+	/**
+	 * Format the numeric serial into AA:BB:CC hex format
+	 *
+	 * @param int $serial
+	 * @return string
+	 */
+	protected function formatSerial($serial) {
+		$hex = strtoupper(dechex($serial));
+		return trim(chunk_split($hex, 2, ':'), ':');
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getName() {
+		return $this->name;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getCommonName() {
+		return $this->commonName;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getOrganization() {
+		return $this->organization;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getSerial() {
+		return $this->getSerial();
+	}
+
+	/**
+	 * @return \DateTime
+	 */
+	public function getIssueDate() {
+		return $this->issueDate;
+	}
+
+	/**
+	 * @return \DateTime
+	 */
+	public function getExpireDate() {
+		return $this->expireDate;
+	}
+
+	/**
+	 * @return bool
+	 */
+	public function isExpired() {
+		$now = new \DateTime();
+		return !($this->issueDate <= $now and $now <= $this->expireDate);
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getIssuerName() {
+		return $this->issuerName;
+	}
+
+	/**
+	 * @return string
+	 */
+	public function getIssuerOrganization() {
+		return $this->issuerOrganization;
+	}
+}
diff --git a/lib/public/icertificate.php b/lib/public/icertificate.php
new file mode 100644
index 0000000000000000000000000000000000000000..013496cb373d066a02c0076a2538ae355b8aa56d
--- /dev/null
+++ b/lib/public/icertificate.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OCP;
+
+interface ICertificate {
+	/**
+	 * @return string
+	 */
+	public function getName();
+
+	/**
+	 * @return string
+	 */
+	public function getCommonName();
+
+	/**
+	 * @return string
+	 */
+	public function getOrganization();
+
+	/**
+	 * @return string
+	 */
+	public function getSerial();
+
+	/**
+	 * @return \DateTime
+	 */
+	public function getIssueDate();
+
+	/**
+	 * @return \DateTime
+	 */
+	public function getExpireDate();
+
+	/**
+	 * @return bool
+	 */
+	public function isExpired();
+
+	/**
+	 * @return string
+	 */
+	public function getIssuerName();
+
+	/**
+	 * @return string
+	 */
+	public function getIssuerOrganization();
+}