Shammer's Philosophy

My private adversaria

OpenSSLで証明書を承認する

先に作成していたCSRに対して、CAを使用して証明書を発行してみる。
なお、先に作成していたopenssl.confやCSRを利用するものと想定。コマンドは以下のようになる。

openssl ca -conf openssl.conf -in server1_csr.pem

設定ファイルがおかしいと何らかのエラーが出るはず。
自分でもいくつかエラーが出た。

Using configuration from openssl.conf
Error opening CA private key /MyOwnRootCA/private/cakey.pem
334:error:02001002:system library:fopen:No such file or directory:bss_file.c:278:fopen('/MyOwnRootCA/private/cakey.pem','r')
334:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:280:
unable to load CA private key

これは、CAの秘密鍵にアクセスできないときだったと思う。設定ファイル(openssl.conf)のprivate_keyや、
default_keyfileの場所を見直すか、コマンドラインで「-keyfile private/cakey.pem」というように秘密鍵を指定すれば解決するはず。

Using configuration from openssl.conf
Enter pass phrase for /MyOwnRootCA/private/cakey.pem:
unable to load CA private key
338:error:06065064:digital envelope routines:EVP_DecryptFinal:bad decrypt:evp_enc.c:509:
338:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:423:

これは、秘密鍵パスフレーズが間違えているとき。これは重症。CAの証明書を作り直すしかない。

Using configuration from openssl.conf
Enter pass phrase for /MyOwnRootCA/private/cakey.pem:
variable lookup failed for MyOwnRootCA::certificate
340:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=MyOwnRootCA name=certificate

これは、CAの証明書にアクセスできないとき。設定ファイル(openssl.conf)のcertificateを見直すか、
コマンドラインで「-cert cacert.pem」というように直接証明書を指定すれば解決するはず。

Using configuration from openssl.conf
Enter pass phrase for /MyOwnRootCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Server1 State Name'
localityName          :PRINTABLE:'Server1 City'
organizationName      :PRINTABLE:'Server1 Organization'
organizationalUnitName:PRINTABLE:'Server1 Unit'
commonName            :PRINTABLE:'Server1'
emailAddress          :IA5STRING:'hogehoge.fugafuga@example.com'
organizationUnitName:unknown object type in 'policy' configuration

というのもあった。これは、openssl.confのpolicyで、organizationalUnitName = optional と定義できるのだが、
organizationUnitName = optional と間違えていたときに発生。
なかなか気付けず苦労した・・・TRY & ERROR を繰り返し、問題がすべて解決すれば、
冒頭の openssl ca 〜 コマンドでサーバー証明書は完成するはず。以下のようになる。

Using configuration from openssl.conf
Enter pass phrase for /MyOwnRootCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'JP'
stateOrProvinceName   :PRINTABLE:'Server1-State'
localityName          :PRINTABLE:'Server1-City'
organizationName      :PRINTABLE:'Server1-Organization'
organizationalUnitName:PRINTABLE:'Server1-OrgUnit'
commonName            :PRINTABLE:'Server1'
emailAddress          :IA5STRING:'hogehoge.fugafuga@example.com'
Certificate is to be certified until Oct 27 17:05:48 2019 GMT (3650 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: md5WithRSAEncryption
        Issuer: CN=MyOwnRootCA, ST=Tokyo, C=JP/emailAddress=hogehoge.fugafuga@example.com, O=My Own Root Certification Authority
        Validity
            Not Before: Oct 29 17:05:48 2009 GMT
            Not After : Oct 27 17:05:48 2019 GMT
        Subject: C=JP, ST=Server1-State, O=Server1-Organization, OU=Server1-OrgUnit, CN=Server1/emailAddress=hogehoge.fugafuga@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (1024 bit)
                Modulus (1024 bit):
                    00:ea:c0:41:dd:00:60:fc:d6:7e:b2:cc:4d:44:a4:
                    59:98:6e:dd:23:4b:b6:c6:5e:e7:e8:d2:23:e2:1e:
                    0e:48:06:67:0c:1e:56:69:9e:62:03:23:f9:3e:cf:
                    e0:a7:70:b9:de:d5:f7:3f:a3:3f:9e:b5:e1:bf:a4:
                    3e:6f:7f:26:d2:ec:9c:15:94:58:84:fc:80:07:eb:
                    d4:cd:c4:2e:d0:7d:1a:a2:ee:01:93:34:cc:ee:68:
                    51:21:40:64:82:ec:d7:7e:57:74:5c:11:c6:c6:3d:
                    ab:b9:b7:0e:07:bf:42:8d:b5:95:64:de:06:57:10:
                    42:34:43:f7:b8:68:f6:d2:5f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
    Signature Algorithm: md5WithRSAEncryption
        56:53:35:72:ee:4b:fa:ff:0d:e5:47:63:15:45:c1:b5:78:9f:
        45:4c:ec:55:35:fb:89:17:c1:18:62:4b:c3:20:87:64:1b:49:
        c6:5c:d0:8a:12:5b:dc:dc:f5:7e:ca:f2:b5:68:77:55:cd:7f:
        80:e9:6c:4b:17:16:c6:51:b0:55:e3:aa:31:09:ae:d4:38:17:
        fc:b1:b6:be:73:23:c1:78:f9:07:c0:8a:19:0a:7a:b4:69:44:
        fb:e4:de:f0:4e:08:41:e0:1c:51:b0:90:d7:17:d2:a3:9e:9c:
        1f:a8:ed:c3:06:9c:e5:5c:36:8c:dd:aa:ef:14:2c:c0:53:5b:
        1a:f5:e3:7b:7d:3a:5d:50:92:4e:e5:ba:d2:46:39:df:76:b3:
        cf:88:86:cf:9d:a6:78:fc:71:75:bd:54:81:e6:bd:e5:c0:2e:
        d6:60:80:f8:c9:57:25:38:e1:f2:85:44:e8:1c:9b:5c:8b:cd:
        36:b5:1b:dd:ff:70:61:bf:1a:a4:4c:4a:e8:74:d8:32:2c:37:
        d2:11:2b:73:72:ca:80:34:96:4c:79:38:64:da:c3:65:44:23:
        11:93:f7:6b:33:f9:32:8b:6e:63:75:05:a2:a7:af:21:67:3d:
        0a:f7:24:1d:b6:07:9a:e8:f5:19:9b:f9:b6:4b:88:20:b9:03:
        ec:f8:7b:ee
-----BEGIN CERTIFICATE-----
〜証明書の内容〜
-----END CERTIFICATE-----
Data Base Updated

BEGIN CERTIFICATE の行から、END CERTIFICATE の行までをテキストエディタでコピーし、
拡張子をpemとかcerとかで保存してやれば、それをサーバー証明書として使うことができる。