제어하는 단일 서버에서 실행되는 프로그램을 작성 중이며 클라이언트로부터의 연결을 허용합니다. 데이터를 암호화해야하며 서버 인증은 좋은 방법입니다. tls package from Hackage은 클라이언트 및 서버 암호화 기능을 모두 제공하므로 사용할 계획입니다. Network.TLS와 함께 사용할 자체 서명 된 인증서를 생성하는 방법
나는 키를 생성하고 Network.TLS에pCertificates
매개 변수에 필요한
X509
종류로 변환 할 노력하고있어.
import Data.ByteString (ByteString)
import Data.Certificate.PEM
import Data.Certificate.X509
import qualified Data.ByteString as B
import qualified Data.ByteString.Lazy as L
decode :: ByteString -> Either String X509
decode pem =
case parsePEMCert pem of
Nothing -> Left "certificate not in PEM format"
Just certdata -> decodeCertificate $ L.fromChunks [certdata]
main :: IO()
main = print . decode =<< B.readFile "ca-cert.pem"
그것을 :
여기certtool --generate-privkey --outfile ca-key.pem
certtool --generate-self-signed --load-privkey ca-key.pem --outfile ca-cert.pem
나는 X509 파일을 디코딩하려고 사용하고 프로그램은 다음과 같습니다 나는 GnuTLS's certtool를 사용하여 키, "자체 서명 인증서 생성"의 지침에 따라 생성 PEM 래퍼를 성공적으로 파싱하지만 다음 데이터를 인식하지 못합니다.
$ ./decode
Left "certificate error: \"subject public key bad format : [OID [1,2,840,113549,1,1,1]]\""
tls 패키지에 버그가 있습니까? 또는 위의 certtool
명령을 사용하여 올바른 유형의 파일을 생성하지 못합니까?
다양한 certool 출력으로 프로그램을 실행 해 보았는데 모두 작동합니다. 최신'certificate' 패키지를 사용하고 있습니까? –
@ ThomasM.DuBuisson : 그렇습니다. 여전히 'certificate-0.9.5'에서 발생합니다. 그러나 GnuTLS 버전 2.8.5를 사용하고 있습니다. 3.0.5 버전을 시도해보고 어떤 일이 일어나는지 살펴 보겠습니다. –
참고로, 이것은 ghc 7.2.1, certificate-0.9.5 및 certtool 2.10.5 (gnutls 2.8.6)를 사용하여 저에게 적합합니다. 편집 : 또한 테스트/GHC 7.0.1 및 인증서 0.9.4 작업. –