XMLデジタル署名とは?仕組み・種類・作成方法をわかりやすく解説!
public class KeyPairGeneratorExample public static KeyPair generateKeyPair() throws NoSuchAlgorithmException KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); keyGen.initialize(2048); // 2048ビットの鍵を生成 return keyGen.generateKeyPair(); >
public static void main(String[] args) throws NoSuchAlgorithmException KeyPair keyPair = generateKeyPair(); System.out.println("公開鍵: " + keyPair.getPublic()); System.out.println("秘密鍵: " + keyPair.getPrivate()); >>
6-1-3. XMLデジタル署名の作成以下のコードは、Javaの XMLSignatureFactory を使用してXMLに署名を付与する例です。
import java.io.File;import java.io.FileOutputStream;import java.security.KeyPair;import java.security.PrivateKey;import java.security.PublicKey;import java.security.SignatureException;import javax.xml.crypto.dsig.*;import javax.xml.crypto.dsig.dom.DOMSignContext;import javax.xml.crypto.dsig.keyinfo.*;import javax.xml.crypto.dsig.spec.C14NMethodParameterSpec;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Node;
public class XMLDigitalSignatureExample public static void main(String[] args) throws Exception // キーペアの生成 KeyPair keyPair = KeyPairGeneratorExample.generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic();
// XML文書の読み込み DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("sample.xml"));
// XMLデジタル署名の作成 XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");
// 署名方式の指定 Reference ref = fac.newReference("", fac.newDigestMethod(DigestMethod.SHA256, null)); SignedInfo signedInfo = fac.newSignedInfo( fac.newCanonicalizationMethod(CanonicalizationMethod.INCLUSIVE, (C14NMethodParameterSpec) null), fac.newSignatureMethod(SignatureMethod.RSA_SHA256, null), java.util.Collections.singletonList(ref));
// 鍵情報の作成 KeyInfoFactory kif = fac.getKeyInfoFactory(); KeyValue kv = kif.newKeyValue(publicKey); KeyInfo keyInfo = kif.newKeyInfo(java.util.Collections.singletonList(kv));
// 署名の作成 DOMSignContext dsc = new DOMSignContext(privateKey, document.getDocumentElement()); XMLSignature signature = fac.newXMLSignature(signedInfo, keyInfo); signature.sign(dsc);
// 署名付きXMLの出力 FileOutputStream fos = new FileOutputStream("signed_sample.xml"); javax.xml.transform.TransformerFactory.newInstance().newTransformer() .transform(new javax.xml.transform.dom.DOMSource(document), new javax.xml.transform.stream.StreamResult(fos)); fos.close();
6-1-4. 署名の検証import java.io.File;import java.security.PublicKey;import javax.xml.crypto.dsig.XMLSignature;import javax.xml.crypto.dsig.XMLSignatureFactory;import javax.xml.crypto.dsig.dom.DOMValidateContext;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;
public class XMLSignatureVerification public static void main(String[] args) throws Exception // 公開鍵を取得(署名作成時に生成したものを使用) KeyPair keyPair = KeyPairGeneratorExample.generateKeyPair(); PublicKey publicKey = keyPair.getPublic();
// 署名付きXMLの読み込み DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(new File("signed_sample.xml"));
// 署名の検証 XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM"); Node signatureNode = document.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature").item(0); DOMValidateContext valContext = new DOMValidateContext(publicKey, signatureNode); XMLSignature signature = fac.unmarshalXMLSignature(valContext);
boolean isValid = signature.validate(valContext); if (isValid) System.out.println("XMLデジタル署名は有効です。"); > else System.out.println("XMLデジタル署名の検証に失敗しました。"); > >>
6-2. まとめ ステップ説明1. キーペアの生成RSAを使用して公開鍵と秘密鍵を作成2. XMLデジタル署名の作成 XMLSignatureFactory を使用して署名を作成3. 署名付きXMLの出力署名を付加したXMLをファイルとして保存4. 署名の検証 XMLSignatureFactory を用いて署名の整合性をチェック IT資格を取りたいけど、何から始めたらいいか分からない方へ- 出題傾向に絞ったカリキュラム
- 講師に質問できて、挫折しない
- 学びながら就職サポートも受けられる
IEEE802.1X認証とは?仕組み・設定・導入手順をわかりやすく解説!
2025年3月23日 gajigajiSMTP認証とは?仕組みや設定方法、トラブル解決法を徹底解説!
2025年3月18日 gajigaji生体認証とは?指紋だけではない 顔・静脈・虹彩・音声の違いと選び方を徹底解説!
2025年8月24日 gajigaji- プロフィール
- プライバシーポリシー
- お問い合わせ
- サイトマップ
- ネットワークセキュリティを学ぶためにおすすめな動画5選
- ネットワークセキュリティ初心者の勉強におすすめな本7選!
- 20代エンジニアが“最短でCCNA合格”を実現する方法とは?
- 外資系セキュリティメーカーへの転職を成功させるポイント