弁財天
ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」
ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」
Apacheにサーバー証明書とクライアント証明書を指定する
オレオレ証明書
Cygwinでクライアント証明書発行
/usr/ssl/openssl.cnfを修正 countryName_default = JP stateOrProvinceName_default = SomeWhere localityName = SomePref 0.organizationName_default = Hoge organizationalUnitName_default = HogeHoge commonName_default = Hoge_CA emailAddress_default = hoge@somewhere.jp $ mkdir ssl2 $ cd ssl2 $ cat /dev/null > index.txt $ echo '01' > serial $ echo '01' > crlnumber $ mkdir private $ mkdir private/newcerts $ chmod 700 private $ mkdir newcerts $ mkdir crl $ mkdir certs 秘密キーの作成 $ openssl genrsa -out private/cakey.pem 1024 CA証明書の作成 $ openssl req -new -x509 -days 1825 -key private/cakey.pem -out cacert.pem DER形式に変換 $ openssl x509 -in cacert.pem -outform DER -out cacert.der ikeyman立ち上げ CMS型で鍵データベースファイルを新規作成 c:\somewhere\key.kdb パスワードをファイルに隠しておきますか?をチェック c:\somewhere\key.sth 署名者証明書にcacert.derを追加 個人証明書要求でcertreq.armを作成 $ cp /usr/ssl/openssl.cnf ./openssl_server.cnf $ vi openssl_server.cnf 証明書タイプをサーバ証明書に変更 ./openssl_server.cnf [ CA_default ] #default_md = default # use public key default MD default_md = sha256 # default is an unsupported message digest typeエラー回避w [ usr_cert ] nsCertType = server certreq.armに対して署名する $ openssl ca -config ./openssl_server.cnf -policy policy_anything -out ./cert-server.pem -infiles certreq.arm 証明書の確認 $ openssl verify -CAfile cacert.pem cert-server.pem サーバ証明書をDER形式に変換する $ openssl x509 -in cert-server.pem -out cert-server.der -outform der ikeymanの個人用証明書プルダウンでcert-server.derファイルを「受信...」 CA証明書をブラウザに組み込めるようにder形式に変換 $ openssl x509 -inform pem -in cacert.pem -out cacert.der -outform der CA証明書をpkcs12形式に変更 $ openssl pkcs12 -export -inkey private/cakey.pem -in cacert.pem -out cacert.p12 クライアント証明書要求の作成 $ openssl req -new -key private/cakey.pem -out client_req.pem $ cp /usr/ssl/openssl.cnf . $ mv openssl.cnf openssl_client.cnf クライアント証明書タイプを変更 openssl_client.cnf [ usr_cert ] nsCertType = client, email クライアント証明書要求に署名 $ openssl ca -config openssl_client.cnf -out client_cert.pem -infiles client_req.pem クライアント証明書をpkcs12形式に変更 $ openssl pkcs12 -export -in client_cert.pem -inkey private/cakey.pem -certfile cacert.pem -out client_cert.p12 -name Hoge_Client -caname Hoge_CA このとき組み込み用パスワードを設定
ikeymanはWebSphere付属のIHSのキーストア。以下はopenssl実装のApache2.2での証明書の作成方法。
[0.make_private_key.sh]
#!/bin/sh mkdir -p private openssl genrsa -out private/cakey.pem 1024[1.make_ca_cert.sh]
#!/bin/sh openssl req -config ./openssl.cnf -new -x509 -days 1825 -key private/cakey.pem -out cacert.pem[2.conv_ca_cert_der.sh]
#!/bin/sh openssl x509 -in cacert.pem -outform DER -out cacert.der[3.req_server_cert.sh]
#!/bin/sh openssl req -config ./openssl_server.cnf -new -keyout server_key.pem -out server_req.pem[4.sign_server_cert.sh]
#!/bin/sh mkdir -p newcerts cp /dev/null index.txt echo 01 > serial echo 01 > crlnumber openssl ca -config ./openssl_server.cnf -key private/cakey.pem -out server_cert.pem -infiles server_req.pem[5.cp_server_cert.sh]
#!/bin/sh # remove password from server_key.pem openssl rsa -in server_key.pem -out server_key_nopass.pem cp cacert.pem '/cygdrive/c/Program Files (x86)/Apache Software Foundation/Apache2.2/conf' cp server_cert.pem '/cygdrive/c/Program Files (x86)/Apache Software Foundation/Apache2.2/conf' cp server_key_nopass.pem '/cygdrive/c/Program Files (x86)/Apache Software Foundation/Apache2.2/conf'[6.req_client_cert.sh]
#!/bin/sh openssl req -config ./openssl_client.cnf -new -keyout client_key.pem -out client_req.pem[7.sign_client_cert.sh]
#!/bin/sh openssl ca -config ./openssl_client.cnf -key ../0.ca/private/cakey.pem -out client_cert.pem -infiles client_req.pem[8.make_pkcs12_client_cert.sh]
#!/bin/sh openssl pkcs12 -export -in client_cert.pem -inkey private/cakey.pem -certfile cacert.pem -out client_cert.p12 -name Hoge_Client -caname Hoge_CA $
クライアント証明書に署名するときに以下のエラーになることがある。
failed to update database TXT_DB error number 2どうもindex.txtの
$ cat index.txt V 140326012911Z 01 unknown /C=JP/ST=SomePref/O=HogeCA/OU=HogeOUServer/CN=win-hoge/emailAddress=hoge@nsa.gov V 140326014941Z 02 unknown /C=JP/ST=SomePref/O=HogeCA/OU=HogeOUClient/CN=win-hoge/emailAddress=hoge@nsa.gov $あと要求を引き下げるとか。
$ openssl ca -key ../0.ca/private/cakey.pem -config ./openssl_client.cnf -revoke ./newcerts/02.pem Using configuration from ./openssl_client.cnf Revoking Certificate 02. Data Base Updated $
FFでもIEでもCA証明書を先にインポートしたあとにクライアント証明書をインポートしないと
個人証明書の分類にCA証明書が配置され証明チェインが壊れるのは仕様か?
←最初にCA証明書をインポートするのはサーバ証明書の信頼されたルート証明機関でも使うため。
クライアント証明書を先にインポートすると個人証明書のフォルダーにCA証明書がインポートされる。
その状態だとサーバ証明書のCA証明書には使われない配置になる。
FFが間違った証明書を通してしまうので混乱してしまう。 つーことはFFの証明書の検証は怪しいことになるな。
Internet Explorer 8 & User Certificates
WinXPのIE8で証明書が無効になるバグがある。
←これは証明書がうまくできてないから。
[Thu Apr 04 15:22:22 2013] [error] Init: SSLPassPhraseDialog builtin is not supported on Win32 (key file C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/server_key.pem)Entrust Certificate Services Support Knowledge Base
2. Use the OpenSSL command to remove the passphrase such as; openssl rsa -in server.key.org -out server.key server.key will be your new private key with the passphrase removed.
Tomcat7のSSLポートを公開するには、
/etc/tomcat/server.xml
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" keystoreFile="/usr/share/tomcat/.keystore" keystorePass="hogehoge" URIEncoding="UTF-8" clientAuth="false" sslProtocol="TLS" useServerCipherSuitesOrder="true" ciphers="TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_256_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA256, TLS_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA" />
5.conv_server_cert_der.sh
#!/bin/sh openssl x509 -in server_cert.pem -outform DER -out server_cert.der
6.tomcat_keystore.sh
#!/bin/sh rm -f ./tomcat.keystore LANG=C keytool -genkey -alias priv_key -keyalg RSA -sigalg SHA256withRSA -keysize 2048 -validity 7305 -keystore ./tomcat.keystore -storepass hogehoge << END_OF_RES0 Hoge Hoge Hoge HogeCity HogePref JP y END_OF_RES0 LANG=C keytool -import -alias ca -keystore ./tomcat.keystore -file ../0.ca/cacert.der << END_OF_RES hogehoge y END_OF_RES LANG=C keytool -import -alias tomcat -keystore ./tomcat.keystore -file ./server_cert.der << END_OF_RES2 hogehoge y END_OF_RES2 LANG=C keytool -list -keystore tomcat.keystore << END_OF_RES3 hogehoge END_OF_RES3
7.nopassword_server_cert.exp
#!/usr/bin/expect -f set timeout 1 spawn openssl rsa -in server_key.pem -out server_key_nopass.pem log_user 1 expect "Enter pass phrase for server_key.pem:" send "hogehoge\r" expect eof exit 0 # EOF
7.cp_server_cert.sh
#!/bin/sh ./7.nopassword_server_cert.exp cp ../0.ca/cacert.pem /etc/pki/tls/certs/. cp server_cert.pem /etc/pki/tls/certs/. cp server_key_nopass.pem /etc/pki/tls/private/. cp tomcat.keystore /usr/share/tomcat/.keystore systemctl stop httpd.service systemctl restart tomcat.service systemctl start httpd.serviceTLS_ECDHE_RSA_WITH_AES_256_CBC_SHAの記事も参考。
Bonaponta in Linux 2011年1月20日 午前 10:28 JST
Tags: オレオレ証明書