生成私鑰+證書:
keytool -genkey -alias client -keysize 2048 -validity 3650 -keyalg RSA -dname "CN=localhost" -keypass $client_passwd -storepass $client_passwd -keystore ClientCert.jks
生成文件文件ClientCert.jks。工具
導出證書:code
~/tmp/cert# keytool -export -alias client -keystore ClientCert.jks -storepass $client_passwd -file ClientCert.crt Certificate stored in file <ClientCert.crt> ~/tmp/cert# ll total 8 -rw-r--r-- 1 root root 715 Jun 14 20:24 ClientCert.crt -rw-r--r-- 1 root root 2066 Jun 14 20:21 ClientCert.jks
keytool工具不支持導出私鑰。orm
生成公鑰私鑰:server
~/tmp/cert# openssl genrsa -des3 -out private.pem 1024 Generating RSA private key, 1024 bit long modulus .............................++++++ ...........++++++ e is 65537 (0x10001) Enter pass phrase for private.pem: Verifying - Enter pass phrase for private.pem: ~/tmp/cert# ll total 4 -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem
建立證書請求:ssl
~/tmp/cert# openssl req -subj "/C=CN/ST=BJ/L=BJ/O=HW/OU=HW/CN=CL/emailAddress=xxx@xxx.com" -new -out cert.csr -key private.pem Enter pass phrase for private.pem: ~/tmp/cert# ll total 8 -rw-r--r-- 1 root root 664 Jun 14 20:43 cert.csr -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem
自簽發證書:openssl
~/tmp/cert# openssl x509 -req -in cert.csr -out public.crt -outform pem -signkey private.pem -days 3650 Signature ok subject=/C=CN/ST=BJ/L=BJ/O=HW/OU=HW/CN=CL/emailAddress=xxx@xxx.com Getting Private key Enter pass phrase for private.pem: ~/tmp/cert# ll total 12 -rw-r--r-- 1 root root 664 Jun 14 20:43 cert.csr -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem -rw-r--r-- 1 root root 871 Jun 14 20:44 public.crt
keytool和openssl生成的證書相互之間沒法識別,keytool生成的爲jsk文件,openssl默認生成的爲PEM格式文件。須要先轉換成pkcs12格式,而後再使用對方的命令轉換成須要的格式。it
~/tmp/cert# keytool -importkeystore -srcstoretype JKS -srckeystore ServerCert.jks -srcstorepass 123456 -srcalias server -srckeypass 123456 -deststoretype PKCS12 -destkeystore client.p12 -deststorepass 123456 -destalias client -destkeypass 123456 -noprompt root@SZV1000101361:~/tmp/cert# ll total 24 -rw-r--r-- 1 root root 664 Jun 14 20:43 cert.csr -rw-r--r-- 1 root root 1708 Jun 14 21:01 client.p12 -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem -rw-r--r-- 1 root root 871 Jun 14 20:44 public.crt -rw-r--r-- 1 root root 1372 Jun 14 20:57 ServerCert.jks -rw-r--r-- 1 root root 1682 Jun 14 20:55 server.p12
導出證書:form
~/tmp/cert# openssl pkcs12 -in client.p12 -passin pass:$passwd -nokeys -out client.pem MAC verified OK
導出私鑰:email
~/tmp/cert# openssl pkcs12 -in client.p12 -passin pass:$passwd -nocerts -out client.crt MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase: root@SZV1000101361:~/tmp/cert# ll total 32 -rw-r--r-- 1 root root 664 Jun 14 20:43 cert.csr -rw-r--r-- 1 root root 1184 Jun 14 21:10 client.crt -rw-r--r-- 1 root root 1708 Jun 14 21:01 client.p12 -rw-r--r-- 1 root root 1127 Jun 14 21:07 client.pem -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem -rw-r--r-- 1 root root 871 Jun 14 20:44 public.crt -rw-r--r-- 1 root root 1372 Jun 14 20:57 ServerCert.jks -rw-r--r-- 1 root root 1682 Jun 14 20:55 server.p12
轉換爲pkcs12格式:import
~/tmp/cert# openssl pkcs12 -export -in public.crt -inkey private.pem -out server.p12 -name server -passin pass:${passwd} -passout pass:${passwd} ~/tmp/cert# ll total 16 -rw-r--r-- 1 root root 664 Jun 14 20:43 cert.csr -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem -rw-r--r-- 1 root root 871 Jun 14 20:44 public.crt -rw-r--r-- 1 root root 1682 Jun 14 20:55 server.p12
導入到jks中:
~/tmp/cert# keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass ${passwd} -alias server -deststorepass ${passwd} -destkeypass ${passwd} -destkeystore ServerCert.jks ~/tmp/cert# ll total 20 -rw-r--r-- 1 root root 664 Jun 14 20:43 cert.csr -rw-r--r-- 1 root root 963 Jun 14 20:27 private.pem -rw-r--r-- 1 root root 871 Jun 14 20:44 public.crt -rw-r--r-- 1 root root 1372 Jun 14 20:57 ServerCert.jks -rw-r--r-- 1 root root 1682 Jun 14 20:55 server.p12