約 1,002,149 件
https://w.atwiki.jp/kurushima/pages/113.html
「レガシーを含む高互換性対応でRC4危殆化対策を重視する場合」のnginxのSSL設定例 戻る server { listen 443 ssl; # // 1) 証明書と鍵の設定。中間CA証明書を忘れずに ssl_certificate /etc/ssl/chain.crt; ssl_certificate_key /etc/ssl/server.key; # // 2) 暗号スイート設定は「レガシーを含む幅広い環境用(RC4危殆化重視)」 ssl_ciphers EECDH+AESGCM RSA+AESGCM EECDH+AES AES DES-CBC3-SHA !DSS !DH !PSK !SRP !MD5 !AECDH !kECDH ; # // 3) プロトコルはTLSv1.xとSSLv3 ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; # // 4) 暗号スイート順序サーバー優先 ssl_prefer_server_ciphers on; # // 5) CRIME,TIME攻撃対策でTLS圧縮をオフ # // 設定では不能。nginx 1.2.2以降or1.3.2以降を使用。 # // 以下、3項目は必要に応じオプションで設定 # // 6) 不正証明書発行対策でPinningを設定(max-age 1週間)、値は下記サイト参考 # // https //projects.dm.id.lv/s/pkp-online/calculator.html # add_header Public-Key-Pins "max-age=604800; pin-sha256=EE中略; pin-sha256-IM1中略; includeSubDomains"; # // 7) HSTSの設定(max-age 6ヶ月) # add_header Strict-Transport-Security "max-age=15724800; includeSubDomains"; # // 8) OCSP Stapling設定 # // 設定はグローバルサイン社のサイトなどが参考になります # // https //sslcheck.globalsign.com/ja/help/26d15ece # ssl_stapling on; # ssl_stapling_verify on; # // OCSPの検証およびクライアント認証用CA証明書 # ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates; # 後略 }
https://w.atwiki.jp/kurushima/pages/70.html
@IT 実用 Apache 2.0運用管理術 第5回 Poundで作るロードバランサとSSLラッパ 山崎はるかのメモ RFC2068・HTTPエラーコード表・一覧 パワーソフト HTML特殊文字一覧
https://w.atwiki.jp/kurushima/pages/51.html
プロジェクト管理 ITpro 目指せ!PMP PMBOKで学ぶプロジェクトマネジメント
https://w.atwiki.jp/kurushima/pages/24.html
命名規則について OpenSSLで使われている構造体、変数、関数名の命名規則を 予め把握しておくとコードがずっと読みやすくなると思います。 関数 BIO_* バイナリ入出力ストリームを扱う関数 BN_* 不定長整数BIGNUMを扱う関数 MD_* ハッシュ関数を扱う関数 OBJ_* オブジェクト識別子OIDを扱う関数 RSA_* RSA鍵を扱う関数 d2i_* バイナリデータから構造体への変換 d2i_*_bio バイナリストリームから構造体の生成 i2d_* 構造体からバイト列への変換 構造体 BIO バイナリ入出力ストリーム BIGNUM 不定長整数 EVP_PKEY 公開鍵暗号の秘密鍵か公開鍵 PKCS12 PKCS#12データ(秘密鍵や公開鍵証明書を格納します) RSA RSA鍵 X509 X.509公開鍵証明書
https://w.atwiki.jp/kurushima/
最近、歳のせいかめっきりもの忘れがひどくなっていく一方なので、このウィキでは情報セキュリティやプログラミングに関して、まとめたことを備忘録として残していこうと思います。お役にたつようなことがあれば幸いです。 日記の最新記事10件 別館にある日記の最新記事をちょっとご紹介、、、 Mozilla FirefoxのCRLiteで遊ぶ (moz_crlite_queryの話) (2020-11-29) (小ネタ)サンフランシスコに行った時のSIM(Lycammobile)の話(2018年7月版) (2020-11-28) Google Open Source Peer Bonus Award受賞しちゃいました (2020-10-03) jsrsasignの寄付金を募ることにしてみました(やりがいって何だっけ?) (2020-07-21) 最近の証明書の話題(3) デジタル証明書形式の電子委任状のプロファイルに関する考察 (2018-08-27) 最近の証明書の話題(2) CloudFlare DNS 1.1.1.1サイトのIPv6証明書 (2018-04-11) 最近の証明書の話題(1) 韓国政府PKIのマズいワイルドカード証明書発行 (2018-04-11) (小ネタ) Chrome 60で証明書を表示させるフラグ設定 (2017-08-11) GmailアカウントでS/MIME 署名/暗号メールを使う(その1 iOS標準メーラー編) (2017-06-09) Amazon AWSの認証局が少し怪しい件 (2017-05-02) ブログの記事一覧リンク OpenSSL・記事一覧 SSL証明書・記事一覧 XAdES・記事一覧 コード署名・記事一覧 タイムスタンプ・記事一覧 出張・旅行・記事一覧 酒・記事一覧 食・記事一覧 Android関連記事 ARES EC309の便利なリンク 長期署名フォーマット(CAdES/XAdES)関連記事 CAdES,CMS,ESSの属性一覧 ETSI ESI26 Istanbul ETSI STF351 Torre Girona XAdES実装例外の原因のまとめ ハッシュアルゴリズムに関する記事 次世代SHA3ハッシュアルゴリズム OpenSSLに関する記事 Debian脆弱性 Debian脆弱性/DebianのOpenSSLはどのように修正されたか Debian脆弱性/dowkdとopenssl-blacklistのブラックリスト生成の違い Debian脆弱性/PKCS8秘密鍵→SSH2公開鍵変換ツール Debian脆弱性/SSH2X509鍵変換ツール Debian脆弱性/ブラックリストのメモ InternetWeek2014 InternetWeek2014/BwCompatCBC InternetWeek2014/BwCompatRC4 InternetWeek2014/CiphersIvanRistic InternetWeek2014/CiphersModern InternetWeek2014/CiphersMozillaModern InternetWeek2014/ConfigApacheBwCompatCBC InternetWeek2014/ConfigApacheBwCompatRC4 InternetWeek2014/ConfigApacheModern InternetWeek2014/ConfigLighttpdBwCompatCBC InternetWeek2014/ConfigLighttpdBwCompatRC4 InternetWeek2014/ConfigLighttpdModern InternetWeek2014/ConfigNginxBwCompatCBC InternetWeek2014/ConfigNginxBwCompatRC4 InternetWeek2014/ConfigNginxModern PKIDay2010 RubyOpenSSL やりたい事から探すコマンド実行例 プログラミングの基本 プログラミングの基本/あとがき プログラミングの基本/どういうケースで使うか? プログラミングの基本/サンプル プログラミングの基本/サンプル/SHA1ハッシュ値の計算 プログラミングの基本/サンプル/証明書の読み込みと表示 プログラミングの基本/命名規則について メモ リンク集 Linux Debian,Ubuntu便利帳 個人的に役に立つリンク Jython 2.5xインストール方法 リンク集 コンピュータ 64bit CPU関連リンク HP ProLiant ML110 G5 SHA1問題 Windows XP SP3のSHA2ルート証明書の対応 XAdES関連 Windows関連 Windows XPの設定Tips Windowsのログファイル ソフトウェアに関するメモ・覚書 Firefoxアドオン gitメモ Mac初期設定 Vertrigoサーバー コマンド備忘録 雑多なリンク集 HTMLリンク集 ISO標準化関連リンク IT製品サービスリンク集 Java関連リンク集 Python関連リンク SAMLリンク集 VMWareリンク集 XMLリンク集 インターネットツールリンク集 ウィルスマルウェア対策リンク集 ウェブブラウザ関連リンク集 エントラスト関連リンク集 ケータイ スマートカードベンダー関連リンク ネットワーク関連リンク集 フリー写真素材リンク集 プロジェクト管理リンク集 ベルギー・ブリュッセル関連リンク モバイル用喫茶室ルノアール店舗一覧 旅行出張/ニューヨーク関連リンク 未整理のリンク集 欲しいかもリンク集 生活に役立つリンク集 英語のお勉強リンク その他 @wikiでのページ作成に便利なリンク docomoケータイクイックリファレンス グルメ/神保町でのランチのためのリンク 他にどんなドキュメントがあるかは、左←の「ページ一覧」でご覧下さい。
https://w.atwiki.jp/kurushima/pages/11.html
Debian OpenSSL脆弱性問題のまとめはこちらを、最新のSSLブラックリストの更新履歴のまとめはこちらをご覧ください。m(_ _)m DebianのOpenSSLで生成したRSAやDSA暗号の鍵が、正しい乱数の使い方をしないままプロセスIDを元に生成されていたので、生成される秘密鍵があらかじめ予測可能なものとなっていました。 UbuntuではOpenSSLで生成されたPKCS#8秘密鍵をチェックするツールおよび、ブラックリストがもうあるようですが、PKCS#8秘密鍵を暗号化しないままファイルとしておいておくことはあまりないため、X.509証明書および鍵を調べることは難しいのではないかと思います。 そこで、X.509公開鍵証明書からSSH2鍵を生成するツールをJavaにより実装しました。 SSH2鍵の脆弱性チェックツール(ssh-vulnkeyやdowkd.pl)でチェックすることができるようになります。 説明 一部のDebian、UbuntuやKNOPPIXの環境で生成されたOpenSSLベースの鍵は、 プロセスIDを元に乱数としており、乱数の使用方法に問題があったため、秘密鍵が予測される可能性があります。 http //www.us-cert.gov/current/index.html#debian_openssl_vulnerability また、UbuntuではOpenSSHやOpenSSLの脆弱な鍵のブラックリストや 脆弱性チェックツールssh-vulnkey(OpenSSHクライアントに同梱)やdowkd.plなどの スクリプトが配布されており、OpenSSH鍵についてはチェックの環境は整っていると 思われますが、openssh-blancklist-0.1に含まれるPythonで実装されたチェックスクリプト openssl-vulnkeyはブラックリストとの突合方法に問題があるようで サンプルに含まれた脆弱な鍵を脆弱であると判断できないようです。 openssl-vulnkeyではパスワードで保護されていないRSA秘密鍵を対象に チェックするため、一般的には秘密鍵をそのまま保存しておくケースが無いため SSLサーバー証明書、クライアント証明書、S/MIME用証明書など X.509公開鍵証明書とその秘密鍵が脆弱であるかどうかチェックできる 環境にないと思われます。 本ツールでは、X.509公開鍵証明書よりSSH2公開鍵を生成します。 生成された鍵はSSH2鍵の脆弱性チェックツール(ssh-vulnkey, dowkd.pl)で 検証すれば、証明書や秘密鍵が脆弱であるか判断することができます。 ツールはJavaで実装され、ソースコードは公開します。 ツールとして、また公開鍵関係のプログラミングの勉強など 自由に利用してもらって構いません。 (大した量のプログラムでないので、、、(^^; 動作環境 Sun Java 1.4.0 以降でコンパイルおよび動作するはずです Trilead社のフリーなSSHライブラリを使用します。http //www.trilead.com/ よりダウンロードして下さい。 Trelead SSH-2 for Java build 213で動作確認しました。 コンパイル 本ページの下方にある添付ファイルX509CertToSSHPubKye.java.txt のテキストファイルをダウンロードし、ファイルの拡張子を.java.txtから.javaに変更して下さい。 クラスパスにTrileadのライブラリを加えてください。 % export CLASSPATH=$CLASSPATH ./trilead-ssh2-build213.jar コンパイル % javac X509CertToSSHPubKey.java X.509公開鍵証明書からSSH2公開鍵ファイルの生成 チェックしたい証明書をファイルとして保存します。 DERバイナリ形式でもPEMテキスト形式でも構いません。 保存したファイル名を例えば aaa.cer とします。 以下を実行します。 % java X509CertToSSHPubKey aaa.cer すると、対応するSSH2公開鍵ファイル "aaa.cer.ssh.pub" が生成されます。 SSH鍵のユーザIDを指定する場合には、引数で以下のように 指定できます。 % java X509CertToSSHPubKey aaa.cer bar@bar 鍵の脆弱性のチェック 例えば "dowkd.pl"の場合には以下のようにチェックできます。 % dowkd.pl file aaa.cer.ssh.pub 配布条件 このソフトウェアはフリーかつ無保証で配布します。 このソフトウェアによるいかなる損害についても責任を負いません。 既知の問題 Base64のエンコードにsun.misc.BASE64Encoderを使ってしまっています。Java 1.6を使った場合には、「使ってはならん!」と警告が出るかもしれません。これが嫌な方はJava MailやBouncyCastleなど別のBase64エンコーダを使うよう変更して頂いて構いません。 変更履歴 2008.05.21 初版リリース ソースコード /* * * X509CertToSSHPubKey - generate SSH2 public key file from X.509 certificate * * Kenji URUSHIMA *18-Mar-2008 * * 1. DESCRIPTION * * OpenSSL and OpenSSH vulnerabilities are announced on May 15, 2008. * http //www.us-cert.gov/current/index.html#debian_openssl_vulnerability * * This tool helps you to check whether the key corresponding to * the in your X.509 certificate is weak using OpenSSH key blacklist or * checking tools. * * 2. REQUIREMENT * * - This works on Sun Java 1.4.x or later. * - This requires 3rd party open source SSH libary from Trilead. * You can download it from http //www.trilead.com/ * - This was tested using Trilead SSH-2 for Java build 213. * * 4. COMPILE * * - add Trilead libery to class path * % export CLASSPATH=$CLASSPATH ./trilead-ssh2-build213.jar * - compile * % javac X509CertToSSHPubKey.java * * 5. GENERATE SSH2 PUBLIC KEY FILE FROM X.509 CERTIFICATE * * - save X.509 certificate as a DER binary or PEM text file. * - run tool * * % java X509CertToSSHPubKey aaa.cer * * Then you can get SSH2 public key file "aaa.cer.ssh.pub" using * the public key in "aaa.cer". * * You can also specify user id for SSH key. * % java X509CertToSSHPubKey aaa.cer bar@bar * * 6. CHECK KEY WEEKNESS * * - You can check key weakness using "dowkd.pl" Perl script. * % dowkd.pl file aaa.cer.ssh.pub * If the key is weak you ll get "weak key" message. * * 7. CONDITIONS * * This is free software with ABSOLUTELY NO WARRANTY. * * 8. CHANGELOG * - 21 May 2008 initial release */ import java.io.FileInputStream; import java.io.FileWriter; import java.math.BigInteger; import java.security.PublicKey; import java.security.cert.Certificate; import java.security.cert.CertificateFactory; import com.trilead.ssh2.signature.RSASHA1Verify; import com.trilead.ssh2.signature.RSAPublicKey; import com.trilead.ssh2.signature.DSASHA1Verify; import com.trilead.ssh2.signature.DSAPublicKey; import sun.misc.BASE64Encoder; // referring classes // java.security.interfaces.RSAPublicKey // java.security.interfaces.DSAPublicKey public class X509CertToSSHPubKey { private static final String DEFAULT_ID = "foo@foo"; public X509CertToSSHPubKey() { } public void convert(String certFile, String sshFile, String sshUserId) { if (sshUserId == null) sshUserId = DEFAULT_ID; // 1. read X.509 Certificate Certificate cert = null; try { FileInputStream fis = new FileInputStream(certFile); CertificateFactory cf = CertificateFactory.getInstance("X.509"); cert = cf.generateCertificate(fis); } catch (Exception ex) { System.out.println("Error can t read certificate file " + certFile + " " + ex.getMessage()); System.exit(1); } // 2. check public key type PublicKey pubkey = cert.getPublicKey(); String alg = pubkey.getAlgorithm(); String sshKeyType = null; String key = null; if ("RSA".equals(alg)) { java.security.interfaces.RSAPublicKey rsaPK = (java.security.interfaces.RSAPublicKey)pubkey; BigInteger n = rsaPK.getModulus(); BigInteger e = rsaPK.getPublicExponent(); RSAPublicKey rsaSSHPK = new RSAPublicKey(e, n); byte[] rsaSSHPKbytes = null; try { rsaSSHPKbytes = new RSASHA1Verify().encodeSSHRSAPublicKey(rsaSSHPK); } catch (Exception ex) { System.out.println("Error can t encode RSA SSH public key " + ex.getMessage()); System.exit(1); } key = this.getBase64WithoutNewline(rsaSSHPKbytes); sshKeyType = "ssh-rsa"; } else if ("DSA".equals(alg)) { java.security.interfaces.DSAPublicKey dsaPK = (java.security.interfaces.DSAPublicKey)pubkey; BigInteger p = dsaPK.getParams().getP(); BigInteger q = dsaPK.getParams().getQ(); BigInteger g = dsaPK.getParams().getG(); BigInteger y = dsaPK.getY(); DSAPublicKey dsaSSHPK = new DSAPublicKey(p, q, g, y); byte[] dsaSSHPKbytes = null; try { dsaSSHPKbytes = new DSASHA1Verify().encodeSSHDSAPublicKey(dsaSSHPK); } catch (Exception ex) { System.out.println("Error can t encode DSA SSH public key " + ex.getMessage()); System.exit(1); } key = this.getBase64WithoutNewline(dsaSSHPKbytes); sshKeyType = "ssh-dss"; } else { System.out.println("Error unsupported key algorithm " + alg); System.exit(1); } this.saveSSHPubkeyFile(sshKeyType, key, sshUserId, sshFile); } private void saveSSHPubkeyFile(String header, String key, String id, String sshFile) { try { FileWriter fr = new FileWriter(sshFile); fr.write(header + " " + key + " " + id + "\n"); fr.close(); } catch (Exception ex) { System.out.println("Error can t write ssh public key " + sshFile + " " + ex.getMessage()); System.exit(1); } } private String getBase64WithoutNewline(byte[] b) { BASE64Encoder encoder = new BASE64Encoder(); String b64Str = encoder.encode(b); String result = null; result = b64Str.replaceAll("[\r\n]", ""); result = result.replaceAll("[\n]", ""); return result; } public static void main(String[] args) { String certFile = args[0]; String sshFile = args[0] + ".ssh.pub"; String sshUserId = null; if (args.length 1) sshUserId = args[1]; X509CertToSSHPubKey c2s = new X509CertToSSHPubKey(); c2s.convert(certFile, sshFile, sshUserId); } }
https://w.atwiki.jp/kurushima/pages/119.html
設定タイプ3「レガシーを含む高互換性対応設定(RC4危殆化対応重視)」で望まれる暗号スイートのリスト TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_RSA_WITH_AES_128_GCM_SHA256 TLS_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_256_CBC_SHA TLS_RSA_WITH_3DES_EDE_CBC_SHA OpenSSLでの暗号スイート指定パターンと結果となる暗号スイートリスト(OpenSSL 1.0.1j) EECDH+AESGCM RSA+AESGCM EECDH+AES AES DES-CBC3-SHA !DSS !DH !PSK !SRP !MD5 !AECDH !kECDH TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (ECDHE-RSA-AES256-GCM-SHA384) TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (ECDHE-ECDSA-AES256-GCM-SHA384) TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (ECDHE-RSA-AES128-GCM-SHA256) TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (ECDHE-ECDSA-AES128-GCM-SHA256) TLS_RSA_WITH_AES_256_GCM_SHA384 (AES256-GCM-SHA384) TLS_RSA_WITH_AES_128_GCM_SHA256 (AES128-GCM-SHA256) TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (ECDHE-RSA-AES256-SHA384) TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (ECDHE-ECDSA-AES256-SHA384) TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (ECDHE-RSA-AES256-SHA) TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (ECDHE-ECDSA-AES256-SHA) TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (ECDHE-RSA-AES128-SHA256) TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (ECDHE-ECDSA-AES128-SHA256) TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (ECDHE-RSA-AES128-SHA) TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (ECDHE-ECDSA-AES128-SHA) TLS_RSA_WITH_AES_256_CBC_SHA256 (AES256-SHA256) TLS_RSA_WITH_AES_256_CBC_SHA (AES256-SHA) TLS_RSA_WITH_AES_128_CBC_SHA256 (AES128-SHA256) TLS_RSA_WITH_AES_128_CBC_SHA (AES128-SHA) TLS_RSA_WITH_3DES_EDE_CBC_SHA (DES-CBC3-SHA) ※AES256の方が優先されてしまうが仕方なしとする ※表記:RFC上の暗号スイート名 (OpenSSLの暗号スイート名)
https://w.atwiki.jp/kurushima/pages/45.html
Sun J2SE 1.4 api - Node,Document Sun J2SE 5.0 api - SAXParseException Sun J2SE 6 api - Reference,DOMValidateContext Sun J2SE 6 - Java XMLデジタル署名API NEXTindex - Java入門XPath 旧XPath Apache Xercesスキーマ検証エラーの定義ファイル cvc-*
https://w.atwiki.jp/kurushima/pages/23.html
あとがきに代えて (本質的でないので、読み飛ばしてもらって構いません。) 最近少し訳あって、OpenSSLでプログラミングする 必要がありました。 OpenSSLはソースコードの量が膨大で、 コードがあまり美しくなく難解な部分も多く苦労します。 IPAのCode BlogのOpenSSLワーキンググループでは、 暗号やPKIに詳しい方がOpenSSLのソースコードの 解読に尽力されています。 私も、プログラムを書くうちに、 こんなことを先に知っとけば解読が楽だったのに 目的にピンポイントに絞ったサンプルがあれば ということがあったので、 こんなページを作ってみました。 まだ、作成途中だったりするかもしれませんが、 皆さんのお役に立てば幸いです。
https://w.atwiki.jp/kurushima/pages/87.html
Java JCE関連例外逆引きメモ Java JCE関連で出てくる例外メッセージから原因を探るための「逆引きメモ」を残しておこうと思います。 java.io.IOException subject key, Unknown key spec Invalid RSA modulus size. CertificateFactory.generateCertificateなどで4096bitなど鍵長の大きい鍵の証明書等を読み込むと起きることがある。J2SE 1.4ではRSA4096はダメ。J2SE 6.0かBouncyなどの他のJCEプロバイダを使う。 java.io.IOException Response is unreliable its validity interval is out-of-date ローカル時計が大幅にずれていて取得したOCSPレスポンスが時間範囲外の場合に起きることもある。sun.security.provider.certpath.OCSP.check