Translate

2017年2月22日水曜日

プライベート認証局によるCA証明書つきSSL証明書の発行について

ここでは自身が管理するプライベート認証局を使ってSSL証明書にCA証明書を発行する方法について説明します。

プライベート認証局の構築方法については別記の「プライベート認証のルート証明書の作成について」を参考にしてください。

■KEYファイルの生成

秘密鍵と公開鍵のセットを生成します。
openssl genrsa -aes256 -out server.key 2048

CSRファイルの生成

KEYファイルを元にコモンネームを含んだ公開鍵を生成します。
openssl req -new -key server.key -out server.csr 

■CRTファイルの生成

CA証明書付きのSSL証明書を生成します。
openssl ca -in server.csr -out server.crt \
-keyfile /etc/pki/CA/private/cakey.pem \
-cert /etc/pki/CA/cacert.pem \
-config /etc/pki/tls/openssl-ca.cnf

■秘密鍵の復号化

最後におまけで秘密鍵の複合化についても記載します。
openssl rsa -in server.key -out server.dec.key

プライベート認証のルート証明書の作成について

今回は開発用WEBサーバや社内向けのWEBサービスなどに利用できる、プライベート認証局の構築方法について説明します。

構築環境はCentOS7で、OpenSSLは予めインストールされているものとします。

■CA用のコンフィグ作成

はじめにCA作成用にOpenSSLのコンフィグを作成します。
  1. 既存のコンフィグをコピー
  2. cp /etc/pki/tls/openssl.cnf /etc/pki/tls/openssl-ca.cnf
    
  3. コピーしたコンフィグを修正する
  4. nsCertType 以外は任意ですが付けておくと便利です。
    default_days = 1095
    
    [ req ]
    default_bits = 2048
    default_md = sha256
    
    [ req_distinguished_name ]
    countryName_default = JP
    stateOrProvinceName_default = Kyoto
    localityName_default = Kyoto
    0.organizationName_default = SITZ Co.Ltd.
    emailAddress_default = system@sitz.co.jp
    
    # nsCertType
    nsCertType = sslCA, emailCA
    

■CAの生成

新たに作ったコンフィグを使ってCAを生成します。
SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" \
/etc/pki/tls/misc/CA -newca

■インポート用ファイルに変換

WindowsなどにインポートしやすいようにDERファイルに変換します。
openssl x509 -in /etc/pki/CA/cacert.pem -inform pem \
-out /etc/pki/CA/cacert.der -outform der

2017年2月13日月曜日

JAVAでテスト用SSL証明書を許可する

 Tomcatを使ってTLS接続のサーバ間通信をしようとすると、テスト用サーバの証明書が認証局に登録されていなくってSSLExceptionが出ることがあります。
 その際に、JAVAの信頼済み証明書にテスト用のSSL証明書を登録することで回避する方法について記録します。

■症状

JAVAを使ったHTTPS通信でテストサーバに繋ぐと、SSLExceptionがでる。

■回避方法

ネットを調べていると信頼済み証明書に追加する方法と、証明書の検証をしない方法とがありましたが、後者の場合本運用にそのまま移行できないので、ここでは前者の信頼済み証明書に追加する方法について説明します。

■信頼済み証明書に登録する

  1. tomcatが使用しているjavaのパスを調査し、cacertsを探す
  2. cacertsの場所は通常以下のような場所にあります。
    • Windowsの場合
    • C:\Program Files\java\jre<バージョン番号>\lib\security
      
    • CentOSの場合
    • /etc/pki/ca-trust/extracted/java/
      
  3. keytoolを使ってcacertsに証明書(CRT)を追加する
  4. keytool -importcert -v -trustcacerts -file <証明書ファイル> -keystore <信頼済み証明書ファイル>
    
    証明書ファイル: /etc/httpd/ssl/server.crt
    信頼済み証明書ファイル: /etc/pki/ca-trust/extracted/java/cacerts
    各ファイルが上記の場所に保存されている場合
    keytool -importcert -v -trustcacerts -file /etc/httpd/ssl/server.crt -keystore /etc/pki/ca-trust/extracted/java/cacerts [Enter]
    キーストアのパスワードを入力してください:  
    所有者: CN=www.test.jp, O=Company, L=Kyoto, ST=Kyoto, C=jp
    発行者: CN=www.test.jp, O=Company, L=Kyoto, ST=Kyoto, C=jp
    シリアル番号: ****************
    有効期間の開始日: Mon Feb 13 14:17:42 JST 2017終了日: Thu Feb 11 14:17:42 JST 2027
    証明書のフィンガプリント:
             MD5:  **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
             SHA1: **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
             SHA256: **:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**
             署名アルゴリズム名: SHA512withRSA
             バージョン: 1
    この証明書を信頼しますか。 [いいえ]:  y
    証明書がキーストアに追加されました
    [/etc/pki/ca-trust/extracted/java/cacertsを格納中]
    
    これは、CentOSの例になりますが、Windowsの場合適所修正してください。

■Eclipseの場合

Eclipseでデバッグしている場合は設定のサーバでどのフォルダのJAVAを使用しているか確認することが出来ます。