デジタル署名フォーマット XML と PKCS#7 の両方の性質上、一方から他方への変換はできません。
非常に簡単に説明すると、PKCS#7形式の署名には、とりわけ、データ ダイジェストと OID (オブジェクト識別子) を含む DigestInfo と呼ばれる特定のデータ構造が含まれており、ユーザーの秘密鍵で暗号化されています。XML-Dsig形式は、元の XML データと特定の XML-DSig データ構造のダイジェストから計算された別のデータ値に、暗号化アルゴリズムの最終ステップ (再びユーザーの秘密鍵を使用) を適用します。したがって、両方の暗号化された値は同じではないため、ユーザーの秘密鍵を使用してデータに署名することによってのみ、XML-DSig 署名を生成することができます。この秘密鍵にはアクセスできません (したがって名前は private です)。
その説明から、最初の質問に対する答えは、「いいえ、スムーズなオプションはありません。まったく不可能です」 .
したがって、唯一のオプションは、クライアント側で XML-DSig を直接生成することです。これは、標準の Javascript では不可能であり、Firefox の window.crypto (PKCS7 分離署名のみを生成する) では不可能です。私の会社 ( www.isigma.es ) では、デジタル署名業界では一般的なソリューションであるアプレットを使用して解決しています (多くの商用ソリューションと、いくつかのオープン ソース ソリューションがあります)。ブラウザのプラグインが必要ない場合、これはオプションではないかもしれません。
CAPICOM (Microsoft セットアップで使用できる Windows ベースの Active/X コンポーネント) も XML-DSig を生成せず、CMS/PKCS7 のみを生成します。