文章出處:文武人尹
透過HiSecure Java api認證IC卡(自然人憑證工商憑證)之Applet
1. Hisecure API 線上申請系統註冊(目前提供工商憑證線上註冊),審核時間約三到五天!或直接上網找P11JNI.jar(放在java classpath下如JRE_HOME/lib/ext底下)及P11JNI.dll(放在JRE_HOME/lib/i386以及SystemRoot/system32/底下),不過當然是自己申請比較安全點!
2. client端安裝HiCOS
3. NewJApplet1.java:
package hisecure;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.AccessController;
import java.security.PrivilegedAction;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import tw.com.chttl.Module;
import tw.com.chttl.Token;
public class NewJApplet1 extends javax.swing.JApplet {
JLabel label;
JTextField pinField;
JButton btn;
/** Initializes the applet NewJApplet1 */
public void init() {
JPanel p = new JPanel();
p.setLayout(new GridLayout(2, 2, 2, 2));
label = new JLabel("請輸入憑證PIN碼");
pinField = new JTextField(" ");
p.add(label);
p.add(pinField);
btn = new JButton("登入");
btn.addActionListener(new B1());
p.add(btn);
Container con = getContentPane();
con.setLayout(new GridBagLayout()); // Used to center the panel
con.add(p);
}
/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
class B1 implements ActionListener,PrivilegedAction<Object> {
private String checkLogin(){
String msg = "none";
try {
Module.initialize();
Module module = Module.getInstance();
int[] tokIDs = module.getTokens();
if (tokIDs.length != 0) {
msg = "Ready!";
String pin = "";
if(pinField!=null){
pin =pinField.getText();
}
Token tok=module.getToken(tokIDs[0]);
boolean login=tok.login(pin);
if(label!=null){
label.setText("認證成功:" + login);
}
} else {
msg = "Confirm the reader is ready yet!";
}
} catch (Exception e) {
msg = e.getMessage();
} finally {
return msg;
}
}
public void actionPerformed(ActionEvent e) {
checkLogin();
}
public Object run() {
return "checkLogin";
}
}
}
4. index.html:
< applet code="hisecure.NewJApplet1.class" archive="HiSecure.jar,P11JNI.jar" width="760" height="350" >
< /applet >
5. 含applet class的jar檔放在與index.html同一目錄
p.s. 由於HiSecure Java api使用了JNI呼叫底層程式,而在applet中JNI屬特權模式,因此需要將jar簽章後同時獲得客戶端的同意才得以在瀏覽器中執行(a.使用keytool -genkey -alias test -keysize 2048 -keyalg RSA -sigalg SHA1withRSA -keypass test1234 -storepass test1234 -validity 365 -dname "CN=testname, OU=testunit, O=testorg, L=testlocation,S=teststate , C=TW" -keystore test.jks建立簽章 b.jarsigner HiSecure.jar test將jar檔簽章)
2. client端安裝HiCOS
3. NewJApplet1.java:
package hisecure;
import java.awt.Container;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.security.AccessController;
import java.security.PrivilegedAction;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import tw.com.chttl.Module;
import tw.com.chttl.Token;
public class NewJApplet1 extends javax.swing.JApplet {
JLabel label;
JTextField pinField;
JButton btn;
/** Initializes the applet NewJApplet1 */
public void init() {
JPanel p = new JPanel();
p.setLayout(new GridLayout(2, 2, 2, 2));
label = new JLabel("請輸入憑證PIN碼");
pinField = new JTextField(" ");
p.add(label);
p.add(pinField);
btn = new JButton("登入");
btn.addActionListener(new B1());
p.add(btn);
Container con = getContentPane();
con.setLayout(new GridBagLayout()); // Used to center the panel
con.add(p);
}
/** This method is called from within the init() method to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 400, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 300, Short.MAX_VALUE)
);
}// </editor-fold>
class B1 implements ActionListener,PrivilegedAction<Object> {
private String checkLogin(){
String msg = "none";
try {
Module.initialize();
Module module = Module.getInstance();
int[] tokIDs = module.getTokens();
if (tokIDs.length != 0) {
msg = "Ready!";
String pin = "";
if(pinField!=null){
pin =pinField.getText();
}
Token tok=module.getToken(tokIDs[0]);
boolean login=tok.login(pin);
if(label!=null){
label.setText("認證成功:" + login);
}
} else {
msg = "Confirm the reader is ready yet!";
}
} catch (Exception e) {
msg = e.getMessage();
} finally {
return msg;
}
}
public void actionPerformed(ActionEvent e) {
checkLogin();
}
public Object run() {
return "checkLogin";
}
}
}
4. index.html:
< applet code="hisecure.NewJApplet1.class" archive="HiSecure.jar,P11JNI.jar" width="760" height="350" >
< /applet >
5. 含applet class的jar檔放在與index.html同一目錄
p.s. 由於HiSecure Java api使用了JNI呼叫底層程式,而在applet中JNI屬特權模式,因此需要將jar簽章後同時獲得客戶端的同意才得以在瀏覽器中執行(a.使用keytool -genkey -alias test -keysize 2048 -keyalg RSA -sigalg SHA1withRSA -keypass test1234 -storepass test1234 -validity 365 -dname "CN=testname, OU=testunit, O=testorg, L=testlocation,S=teststate , C=TW" -keystore test.jks建立簽章 b.jarsigner HiSecure.jar test將jar檔簽章)