Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

H!. I'm having a hard time getting the Crypt::SMIME [0] module to sign a message. Because of some reason I always get this response when I run the script:

Crypt::SMIME#setPrivateKey: failed to load the private key: error:0906D066:PEM routines:PEM_read_bio:bad end line at ./cryptsmime-test.pl line 16, <CERT> line 19.

The key and cert look as they should. I created them using this commends:

openssl genrsa 1024 > /home/alice/ssltestkey.pem openssl req -new -key /home/alice/ssltestkey.pem -x509 -days 9999 -out + /home/alice/ssltestcert.pem

And here is my script:

#!/usr/bin/perl use Crypt::SMIME; open(PKEY, "/home/alice/ssltestkey.pem") || die "open failed: $!"; open(CERT, "/home/alice/ssltestcert.pem") || die "open failed: $!"; my $plain = <<'EOF'; From: alice@example.org To: bob@example.org Subject: Crypt::SMIME test his is a test mail. Please ignore... EOF my $smime = Crypt::SMIME->new(); $smime->setPrivateKey(<PKEY>, <CERT>); my $signed = $smime->sign($plain); print $signed;

What did I wrong? Thanks for sharing your insights!

[0] http://search.cpan.org/~mikage/Crypt-SMIME/lib/SMIME.pm

Replies are listed 'Best First'.
Re: Crypt::SMIME Trouble
by andal (Hermit) on Nov 29, 2010 at 08:59 UTC

    Have you tried to look at line 19 of /home/alice/ssltestcert.pem? The module does not like something in this line. Could it be that the line is not terminated with "\n"? Or some junk in it?

      Yes, I did. :-( Adding a new line didn't made any difference except that the line number in the error message was increased by one.

      Here is how ssltestcert.pem looks like:
      -----BEGIN CERTIFICATE----- MIIDFjCCAn+gAwIBAgIJAL3L8kNxXSvcMA0GCSqGSIb3DQEBBQUAMGYxCzAJBgNV BAYTAkRFMRMwEQYDVQQIEwpTb21lLVN0YXRlMRcwFQYDVQQKEw5zaXRhdHVuZ2Eg aW5jLjENMAsGA1UEAxMEbWFyYzEaMBgGCSqGSIb3DQEJARYLbWxAdDM1dC5uZXQw HhcNMTAxMTI4MjE1NTAzWhcNMTExMTI4MjE1NTAzWjBmMQswCQYDVQQGEwJERTET MBEGA1UECBMKU29tZS1TdGF0ZTEXMBUGA1UEChMOc2l0YXR1bmdhIGluYy4xDTAL BgNVBAMTBG1hcmMxGjAYBgkqhkiG9w0BCQEWC21sQHQzNXQubmV0MIGfMA0GCSqG SIb3DQEBAQUAA4GNADCBiQKBgQC4gEIX1x7H4Eh84cep5nIicl7RFCojljR3bovz xNN/ZsO/CHFmXmp3O7Se483Caoxk+jzdSyINhGbZQ8PqXbb91oglIV+b0+ZMeWKw 5dDpWv6wMMFguY7by9ye1gRVHKzODNcQErp7JuP/khDz5DXz85AKm4VU0ADIRRhv +/4lowIDAQABo4HLMIHIMB0GA1UdDgQWBBRdPPyUXZEZdIqiLSS53vLiI+cscTCB mAYDVR0jBIGQMIGNgBRdPPyUXZEZdIqiLSS53vLiI+cscaFqpGgwZjELMAkGA1UE BhMCREUxEzARBgNVBAgTClNvbWUtU3RhdGUxFzAVBgNVBAoTDnNpdGF0dW5nYSBp bmMuMQ0wCwYDVQQDEwRtYXJjMRowGAYJKoZIhvcNAQkBFgttbEB0MzV0Lm5ldIIJ AL3L8kNxXSvcMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAaqZ/X51L Gj3iKsNdJAuDZBC3oCOCTkgN/HDcLxQVFKkolfpwK3C7eQY+5LEAPvTk7OLqeunN o5sqvvEkDXLFyv3xuKimXS7yYhkXu/qKG+7v2sceQUE/FUUx2PflkpbrYVKR4GwF uEUwc0Fuz3r5zrEXFc43Zs1btR33RKtekMU= -----END CERTIFICATE-----

      And this is the ssltestkey.pem:

      -----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQC4gEIX1x7H4Eh84cep5nIicl7RFCojljR3bovzxNN/ZsO/CHFm Xmp3O7Se483Caoxk+jzdSyINhGbZQ8PqXbb91oglIV+b0+ZMeWKw5dDpWv6wMMFg uY7by9ye1gRVHKzODNcQErp7JuP/khDz5DXz85AKm4VU0ADIRRhv+/4lowIDAQAB AoGBALLgTrP0cbhRX5YMBFtZvCBfiEPm6+/yqc19FRzzICZtyKxGkEMymMAe18AQ lqW+TX19C1N1i39Vda2BQMnRsB4EV6wkChNbdVV8K+OEIzfa1hqQE2WdHLWsAOoH YjeTViBXH1d02W2udCyUEe1ucXdpye4/CNAcU5j2GpZcwb/xAkEA8nHznocj/n5q O6vLkyrihWZFlZvf4OHI4B6g08aKsNCSd4zWbMLP/CCD6qN9fYPj0OguWjGqwFgL ExTLdA1TCQJBAMLQ+AWs0vrij0PvCZV8r1gMFYEbaneXai20+7Ls0MsCx5pNpsw6 PfX8785B28D0QJuFXBaO+p3qwN78aKJawksCQAgOpWwFTbrtdJZbFT7k0/Ze+b0J Gx2cI1LfcbTYCk/p/pQeiBnBN6xHYFrx5/+93Fpa/P9eWzBdPLD7pe9LahECQGvg TxbFZmaqge56NPJkAqxctKOzTLdATvlUWHPxkoR325NkIFLChYDrONcbvNYR6pyz shSDw98iGP7hAge0/hUCQQDNp/8U/KrvG4efyga4i/lx7wRUYZPtf3w8Y/1dmFRE wxnKTL3+dt1cdzooIb17Yuv+gfK90fqmhVf+ZhmKFGwH -----END RSA PRIVATE KEY-----

        Have you tried to remove "\r" from the end of lines? Just guessing.

Re: Crypt::SMIME Trouble
by locked_user sundialsvc4 (Abbot) on Nov 29, 2010 at 13:15 UTC

    Crypto code is absolutely intolerant of anything that is not precisely as it should be.   Including end-of-line character placement and extraneous lines.

Re: Crypt::SMIME Trouble
by Anonymous Monk on Jun 10, 2011 at 21:06 UTC
    Using <FH> only gives you the first line where you want to get the whole file's content. This works:
    use Crypt::SMIME; open(PKEY, "signer_key.pem") || die "open failed: $!"; open(CERT, "signer.pem") || die "open failed: $!"; my $plain = <<'EOF'; From: alice@example.org To: bob@example.com Subject: Crypt::SMIME test This is a test mail. Please ignore... EOF ($privkey, $cert); # = (<PKEY>, <CERT>); { local $/=undef; $privkey = <PKEY>; $cert = <CERT>; } my $smime = Crypt::SMIME->new(); $smime->setPrivateKey($privkey, $cert); # $smime->setPublicKey([$icacert]); # if need be. my $signed = $smime->sign($plain); print $signed;