docs: private JPanel getPanelCertificate() {
  		if (certificatePanel == null) {
  
  			//**************************************************************************
  			//begin netbeans code
  			//**************************************************************************
  			certificatePanel = new javax.swing.JPanel();
  			certificatejTabbedPane = new javax.swing.JTabbedPane();
  			keyStorePanel = new javax.swing.JPanel();
  			setActiveButton = new javax.swing.JButton();
  			showAliasButton = new javax.swing.JButton();
  			aliasScrollPane = new javax.swing.JScrollPane();
  			aliasTable = new javax.swing.JTable();
  			deleteButton = new javax.swing.JButton();
  			keyStoreScrollPane = new javax.swing.JScrollPane();
  			keyStoreList = new javax.swing.JList<>();
  			pkcs12Panel = new javax.swing.JPanel();
  			fileLabel = new javax.swing.JLabel();
  			fileTextField = new ZapTextField();
  			browseButton = new javax.swing.JButton();
  			passwordPkcs12Label = new javax.swing.JLabel();
  			addPkcs12Button = new javax.swing.JButton();
  			pkcs12PasswordField = new javax.swing.JPasswordField();
  			pkcs11Panel = new javax.swing.JPanel();
  			driverLabel = new javax.swing.JLabel();
  			driverComboBox = new javax.swing.JComboBox<>();
  			driverButton = new javax.swing.JButton();
  			passwordPkcs11Label = new javax.swing.JLabel();
  			cryptoApiLabel = new javax.swing.JLabel();
  			addPkcs11Button = new javax.swing.JButton();
  			pkcs11PasswordField = new javax.swing.JPasswordField();
  			cryptoApiPanel = new javax.swing.JPanel();
  			useClientCertificateCheckBox = new javax.swing.JCheckBox();
  			enableUnsafeSSLRenegotiationCheckBox = new javax.swing.JCheckBox();
  			textLabel = new javax.swing.JLabel();
  			certificateLabel = new javax.swing.JLabel();
  			certificateTextField = new ZapTextField();
  			showActiveCertificateButton = new javax.swing.JButton();
  			usePkcs11ExperimentalSliSupportCheckBox = new javax.swing.JCheckBox();
  
  			certificatejTabbedPane.setEnabled(false);
  
  			setActiveButton.setText(Constant.messages.getString("options.cert.button.setactive"));
  			setActiveButton.setEnabled(false);
  			setActiveButton.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					try {
  						setActiveButtonActionPerformed(evt);
  					} catch (ProviderException e) {
  						showKeyStoreCertError(e.toString());
  						logger.error(e.getMessage(), e);
  					}
  				}
  			});
  
  			showAliasButton.setText("->");
  			showAliasButton.setEnabled(false);
  			showAliasButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
  			showAliasButton.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					showAliasButtonActionPerformed(evt);
  				}
  			});
  
  			aliasTable.setModel(aliasTableModel);
  			aliasTable.setTableHeader(null);
  			aliasScrollPane.setViewportView(aliasTable);
  
  			deleteButton.setText(Constant.messages.getString("options.cert.button.delete"));
  			deleteButton.setEnabled(false);
  			deleteButton.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					deleteButtonActionPerformed(evt);
  				}
  			});
  
  			keyStoreList.setModel(keyStoreListModel);
  			keyStoreList.addListSelectionListener(new ListSelectionListener() {
  
  				@Override
  				public void valueChanged(ListSelectionEvent evt) {
  					keyStoreListSelectionChanged();
  				}
  			});
  			keyStoreScrollPane.setViewportView(keyStoreList);
  
  			javax.swing.GroupLayout keyStorePanelLayout = new javax.swing.GroupLayout(keyStorePanel);
  			keyStorePanel.setLayout(keyStorePanelLayout);
  			keyStorePanelLayout.setHorizontalGroup(
  					keyStorePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, keyStorePanelLayout.createSequentialGroup()
  							.addGroup(keyStorePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  									.addComponent(deleteButton)
  									.addComponent(keyStoreScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 181, Short.MAX_VALUE))
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addGroup(keyStorePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  											.addGroup(keyStorePanelLayout.createSequentialGroup()
  													.addComponent(setActiveButton)
  													.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 100, Short.MAX_VALUE)
  													.addComponent(showAliasButton))
  													.addComponent(aliasScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 202, Short.MAX_VALUE)))
  			);
  			keyStorePanelLayout.setVerticalGroup(
  					keyStorePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, keyStorePanelLayout.createSequentialGroup()
  							.addGroup(keyStorePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  									.addComponent(aliasScrollPane, 0, 0, Short.MAX_VALUE)
  									.addComponent(keyStoreScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 95, Short.MAX_VALUE))
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addGroup(keyStorePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  											.addComponent(deleteButton)
  											.addComponent(setActiveButton, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE)
  											.addComponent(showAliasButton)))
  			);
  
  			keyStorePanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {deleteButton, setActiveButton, showAliasButton});
  
  			certificatejTabbedPane.addTab(Constant.messages.getString("options.cert.tab.keystore"), keyStorePanel);
  
  			fileLabel.setText(Constant.messages.getString("options.cert.label.file"));
  
  			browseButton.setText(Constant.messages.getString("options.cert.button.browse"));
  			browseButton.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					browseButtonActionPerformed(evt);
  				}
  			});
  
  			passwordPkcs12Label.setText(Constant.messages.getString("options.cert.label.password"));
  
  			addPkcs12Button.setText(Constant.messages.getString("options.cert.button.keystore"));
  			addPkcs12Button.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					addPkcs12ButtonActionPerformed(evt);
  				}
  			});
  
  			javax.swing.GroupLayout pkcs12PanelLayout = new javax.swing.GroupLayout(pkcs12Panel);
  			pkcs12Panel.setLayout(pkcs12PanelLayout);
  			pkcs12PanelLayout.setHorizontalGroup(
  					pkcs12PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(pkcs12PanelLayout.createSequentialGroup()
  							.addGroup(pkcs12PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  									.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pkcs12PanelLayout.createSequentialGroup()
  											.addContainerGap()
  											.addComponent(fileTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 296, Short.MAX_VALUE)
  											.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  											.addComponent(browseButton))
  											.addGroup(pkcs12PanelLayout.createSequentialGroup()
  													.addGap(12, 12, 12)
  													.addComponent(fileLabel))
  													.addGroup(pkcs12PanelLayout.createSequentialGroup()
  															.addContainerGap()
  															.addComponent(passwordPkcs12Label))
  															.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pkcs12PanelLayout.createSequentialGroup()
  																	.addContainerGap(270, Short.MAX_VALUE)
  																	.addComponent(addPkcs12Button))
  																	.addGroup(pkcs12PanelLayout.createSequentialGroup()
  																			.addContainerGap()
  																			.addComponent(pkcs12PasswordField, javax.swing.GroupLayout.DEFAULT_SIZE, 369, Short.MAX_VALUE)))
  																			.addContainerGap())
  			);
  			pkcs12PanelLayout.setVerticalGroup(
  					pkcs12PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pkcs12PanelLayout.createSequentialGroup()
  							.addComponent(fileLabel)
  							.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  							.addGroup(pkcs12PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  									.addComponent(browseButton)
  									.addComponent(fileTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(passwordPkcs12Label)
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(pkcs12PasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(addPkcs12Button)
  									.addGap(70, 70, 70))
  			);
  
  			pkcs12PanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {addPkcs12Button, browseButton, fileTextField, pkcs12PasswordField});
  
  			certificatejTabbedPane.addTab(Constant.messages.getString("options.cert.tab.pkcs"), pkcs12Panel);
  
  			driverLabel.setText(Constant.messages.getString("options.cert.label.driver"));
  
  			driverButton.setText("...");
  			driverButton.setMargin(new java.awt.Insets(2, 5, 2, 5));
  			driverButton.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					driverButtonActionPerformed(evt);
  				}
  			});
  
  			passwordPkcs11Label.setText(Constant.messages.getString("options.cert.label.pincode"));
  
  			addPkcs11Button.setText(Constant.messages.getString("options.cert.button.pkcs11"));
  			addPkcs11Button.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					addPkcs11ButtonActionPerformed(evt);
  				}
  			});
  			
  			usePkcs11ExperimentalSliSupportCheckBox.setText(Constant.messages.getString("certificates.pkcs11.label.experimentalSliSupport"));
  			usePkcs11ExperimentalSliSupportCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
  			usePkcs11ExperimentalSliSupportCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
  			usePkcs11ExperimentalSliSupportCheckBox.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					usePkcs11ExperimentalSliSupportCheckBoxActionPerformed(evt);
  				}
  			});
  			
  			javax.swing.GroupLayout pkcs11PanelLayout = new javax.swing.GroupLayout(pkcs11Panel);
  			pkcs11Panel.setLayout(pkcs11PanelLayout);
  			pkcs11PanelLayout.setHorizontalGroup(
  					pkcs11PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(pkcs11PanelLayout.createSequentialGroup()
  							.addContainerGap()
  							.addGroup(pkcs11PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  									.addComponent(pkcs11PasswordField, javax.swing.GroupLayout.DEFAULT_SIZE, 369, Short.MAX_VALUE)
  									.addComponent(driverLabel)
  									.addComponent(passwordPkcs11Label)
  									.addGroup(pkcs11PanelLayout.createSequentialGroup()
  											.addComponent(driverComboBox, 0, 336, Short.MAX_VALUE)
  											.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  											.addComponent(driverButton))
  											.addComponent(usePkcs11ExperimentalSliSupportCheckBox)
  											.addComponent(addPkcs11Button, javax.swing.GroupLayout.Alignment.TRAILING))
  											.addContainerGap())
  			);
  			pkcs11PanelLayout.setVerticalGroup(
  					pkcs11PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(pkcs11PanelLayout.createSequentialGroup()
  							.addComponent(driverLabel)
  							.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  							.addGroup(pkcs11PanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  									.addComponent(driverButton)
  									.addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(passwordPkcs11Label)
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(pkcs11PasswordField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(usePkcs11ExperimentalSliSupportCheckBox)
  									.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  									.addComponent(addPkcs11Button)
  									.addGap(58, 58, 58))
  			);
  
  			pkcs11PanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {addPkcs11Button, driverButton, driverComboBox, pkcs11PasswordField});
  
  			certificatejTabbedPane.addTab(Constant.messages.getString("options.cert.tab.pkcs11"), pkcs11Panel);
  
  			javax.swing.GroupLayout cryptoApiPanelLayout = new javax.swing.GroupLayout(cryptoApiPanel);
  			cryptoApiPanel.setLayout(cryptoApiPanelLayout);
  			cryptoApiLabel.setText(Constant.messages.getString("options.cert.error.crypto"));
  			cryptoApiPanelLayout.setHorizontalGroup(
  					cryptoApiPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGap(0, 389, Short.MAX_VALUE)
  					.addComponent(cryptoApiLabel)
  
  			);
  			cryptoApiPanelLayout.setVerticalGroup(
  					cryptoApiPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGap(0, 124, Short.MAX_VALUE)
  					.addComponent(cryptoApiLabel)
  			);
  
  			certificatejTabbedPane.addTab(Constant.messages.getString("options.cert.tab.cryptoapi"), cryptoApiPanel);
  
  			useClientCertificateCheckBox.setText(Constant.messages.getString("options.cert.label.useclientcert"));
  			useClientCertificateCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
  			useClientCertificateCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
  			useClientCertificateCheckBox.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					useClientCertificateCheckBoxActionPerformed(evt);
  				}
  			});
  
  			enableUnsafeSSLRenegotiationCheckBox.setText(Constant.messages.getString("options.cert.label.enableunsafesslrenegotiation"));
  			enableUnsafeSSLRenegotiationCheckBox.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 0, 0, 0));
  			enableUnsafeSSLRenegotiationCheckBox.setMargin(new java.awt.Insets(0, 0, 0, 0));
  			enableUnsafeSSLRenegotiationCheckBox.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					enableUnsafeSSLRenegotiationCheckBoxActionPerformed(evt);
  				}
  			});
  			
  			textLabel.setText(Constant.messages.getString("options.cert.label.addkeystore"));
  
  			certificateLabel.setText(Constant.messages.getString("options.cert.label.activecerts"));
  
  			certificateTextField.setEnabled(false);
  			certificateTextField.setEditable(false);
  
  			showActiveCertificateButton.setText("->");
  			showActiveCertificateButton.setActionCommand(">");
  			showActiveCertificateButton.setEnabled(false);
  			showActiveCertificateButton.setMargin(new java.awt.Insets(2, 2, 2, 2));
  			showActiveCertificateButton.addActionListener(new java.awt.event.ActionListener() {
  				@Override
  				public void actionPerformed(java.awt.event.ActionEvent evt) {
  					showActiveCertificateButtonActionPerformed(evt);
  				}
  			});
  
  			javax.swing.GroupLayout certificatePanelLayout = new javax.swing.GroupLayout(certificatePanel);
  			certificatePanel.setLayout(certificatePanelLayout);
  			certificatePanelLayout.setHorizontalGroup(
  					certificatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(certificatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  							.addGroup(certificatePanelLayout.createSequentialGroup()
  									.addComponent(textLabel, 0, 0, Short.MAX_VALUE)
  									.addContainerGap())
  									.addGroup(certificatePanelLayout.createSequentialGroup()
  											.addGap(2, 2, 2)
  											.addGroup(certificatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  													.addComponent(certificatejTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE)
  													.addGroup(certificatePanelLayout.createSequentialGroup()
  															.addGroup(certificatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  																	.addComponent(enableUnsafeSSLRenegotiationCheckBox)
  																	.addComponent(useClientCertificateCheckBox)
  																	.addComponent(certificateLabel)
  																	.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, certificatePanelLayout.createSequentialGroup()
  																			.addComponent(certificateTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE)
  																			.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  																			.addComponent(showActiveCertificateButton)
  																			.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)))
  																			.addContainerGap()))))
  			);
  			certificatePanelLayout.setVerticalGroup(
  					certificatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(certificatePanelLayout.createSequentialGroup()
  							.addContainerGap()
  							.addComponent(textLabel)
  							.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  							.addComponent(enableUnsafeSSLRenegotiationCheckBox)
  							.addComponent(useClientCertificateCheckBox)
  							.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  							.addComponent(certificatejTabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
  							.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  							.addComponent(certificateLabel)
  							.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  							.addGroup(certificatePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  									.addComponent(certificateTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  									.addComponent(showActiveCertificateButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  									.addContainerGap())
  			);
  
  			certificatePanelLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {certificateTextField, showActiveCertificateButton});
  
  			javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  			getContentPane().setLayout(layout);
  			layout.setHorizontalGroup(
  					layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addComponent(certificatePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  			);
  			layout.setVerticalGroup(
  					layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  					.addGroup(layout.createSequentialGroup()
  							.addComponent(certificatePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  							.addContainerGap())
  			);
  
  
  
  			//**************************************************************************
  			//end netbeans code
  			//**************************************************************************
  		}
  		return certificatePanel;
  	}