diff --git a/peyotls.cabal b/peyotls.cabal
--- a/peyotls.cabal
+++ b/peyotls.cabal
@@ -2,7 +2,7 @@
 cabal-version:	>= 1.8
 
 name:		peyotls
-version:	0.1.5.5
+version:	0.1.6.0
 stability:	Experimental
 author:		Yoshikuni Jujo <PAF01143@nifty.ne.jp>
 maintainer:	Yoshikuni Jujo <PAF01143@nifty.ne.jp>
@@ -281,7 +281,7 @@
 source-repository	this
     type:	git
     location:	git://github.com/YoshikuniJujo/peyotls.git
-    tag:	peyotls-0.1.5.5
+    tag:	peyotls-0.1.6.0
 
 library
     hs-source-dirs:	src
diff --git a/src/Network/PeyoTLS/Client.hs b/src/Network/PeyoTLS/Client.hs
--- a/src/Network/PeyoTLS/Client.hs
+++ b/src/Network/PeyoTLS/Client.hs
@@ -11,7 +11,7 @@
 module Network.PeyoTLS.Client (
 	-- * Basic
 	PeyotlsM, PeyotlsHandle, TlsM, TlsHandle, Alert(..),
-	run, open, open', getNames, checkName,
+	run, open, open', getNames, getCertificate, checkName,
 	-- * Renegotiation
 	renegotiate, setCipherSuites, setKeyCerts, setCertificateStore,
 	-- * Cipher Suite
diff --git a/src/Network/PeyoTLS/Client/Body.hs b/src/Network/PeyoTLS/Client/Body.hs
--- a/src/Network/PeyoTLS/Client/Body.hs
+++ b/src/Network/PeyoTLS/Client/Body.hs
@@ -14,7 +14,7 @@
 	-- * Basic
 	TlsState(..), State1(..), Keys(..), toCheckName,
 	PeyotlsM, PeyotlsHandle, TlsM, TlsHandle, Alert(..),
-	run, run', open, open', getNames, checkName,
+	run, run', open, open', getNames, getCertificate, checkName,
 	-- * Renegotiation
 	renegotiate, setCipherSuites, setKeyCerts, setCertificateStore,
 	-- * Cipher Suite
@@ -25,7 +25,7 @@
 import Control.Applicative ((<$>), (<*>))
 import Control.Monad (when, unless, liftM, ap)
 import "monads-tf" Control.Monad.Error.Class (strMsg)
-import Data.Maybe (fromMaybe)
+import Data.Maybe (fromMaybe, fromJust)
 import Data.List (find, intersect)
 import Data.Function (on)
 import Data.HandleLike (HandleLike(..))
@@ -43,7 +43,7 @@
 import qualified Crypto.PubKey.RSA.PKCS15 as RSA
 import qualified "monads-tf" Control.Monad.Error as E
 
-import qualified Network.PeyoTLS.Base as BASE (getNames)
+import qualified Network.PeyoTLS.Base as BASE (getNames, getCertificate)
 import Network.PeyoTLS.Base ( debug, wFlush,
 	TlsState(..), State1(..), Keys(..),
 	PeyotlsM, TlsM, run, run',
@@ -91,6 +91,9 @@
 
 getNames :: HandleLike h => TlsHandle h g -> TlsM h g [String]
 getNames = BASE.getNames . tlsHandleC
+
+getCertificate :: HandleLike h => TlsHandle h g -> TlsM h g X509.SignedCertificate
+getCertificate = (fromJust `liftM`) . BASE.getCertificate . tlsHandleC
 
 checkName :: HandleLike h => TlsHandle h g -> String -> TlsM h g Bool
 checkName t n = flip toCheckName n `liftM` getNames t
diff --git a/src/Network/PeyoTLS/TChan/Client.hs b/src/Network/PeyoTLS/TChan/Client.hs
--- a/src/Network/PeyoTLS/TChan/Client.hs
+++ b/src/Network/PeyoTLS/TChan/Client.hs
@@ -14,6 +14,7 @@
 import Control.Monad.Base
 import Control.Concurrent
 import Control.Concurrent.STM
+import Data.Maybe
 import Data.Word
 import Data.HandleLike
 import Data.X509
@@ -71,11 +72,13 @@
 open :: (CPRG g, ValidateHandle h, MonadBaseControl IO (HandleMonad h)) => h ->
 	[CipherSuite] -> [(CertSecretKey, CertificateChain)] ->
 	CertificateStore -> g ->
-	HandleMonad h (String -> Bool, (TChan BSC.ByteString, TChan BSC.ByteString))
+	HandleMonad h (
+		(String -> Bool, SignedCertificate),
+		(TChan BSC.ByteString, TChan BSC.ByteString))
 open h cs kc ca g = do
 	inc <- liftBase $ atomically newTChan
 	otc <- liftBase $ atomically newTChan
-	((k, ns, _), g') <- (`run'` g) $ C.open h cs kc ca
+	((k, ns, crt), g') <- (`run'` g) $ C.open h cs kc ca
 	let	rk = kRKey k
 		rmk = kRMKey k
 		wk = kWKey k
@@ -102,7 +105,7 @@
 				_ -> error "Network.PeyoTLS.TChan.Client.open': bad"
 			Right pln = decrypt hs rk rmk sn pre enc
 		liftBase . atomically $ writeTChan inc pln
-	return (toCheckName ns, (inc, otc))
+	return ((toCheckName ns, fromJust crt), (inc, otc))
 
 putEncrypted :: (HandleLike h, CPRG g) =>
 	h -> (Hash, Int) -> BSC.ByteString -> BSC.ByteString
